sql >> データベース >  >> RDS >> Sqlserver

T-SQL COALESCE GROUPING SETS は、NULL の重複なしで単一の列に設定されます

    これがあなたの期待したものと違っていたら申し訳ありませんが、単純に NULL を取り除く必要があるのであれば、なぜこのようにできないのかわかりません:

    ;WITH CTEterm AS (
        SELECT
           ROW_NUMBER() OVER (PARTITION BY #term.en, refterm.en
                                  ORDER BY #term.en) AS rownumber,
           #term.en AS mainterm,
           CHAR(9) + 'SN ' + #term.enscope AS scopenote,
           CHAR(9) + #link.reltype + CHAR(32) + refterm.en AS subterms,
           CHAR(9) + 'CODE ' + #categorylink.code AS codes
        FROM #link
           INNER JOIN #term ON #term.termid = #link.termid
           INNER JOIN #term AS refterm ON refterm.termid = #link.refid
           LEFT JOIN #categorylink ON #term.termid = #categorylink.termid
    )
    SELECT
      AggValue
    FROM (
      SELECT
        mainterm, codes, subterms, scopenote,
        COALESCE(
          CASE WHEN rownumber = 1 THEN mainterm ELSE NULL END,
          scopenote,
          subterms,
          codes
        ) AS AggValue
      FROM CTEterm
      GROUP BY GROUPING SETS ((mainterm, rownumber), (mainterm, scopenote),
                              (mainterm, subterms), (mainterm, codes))
    ) s
    WHERE AggValue IS NOT NULL
    ORDER BY mainterm, codes, subterms, scopenote
    

    注:ELSE NULL 何も変更しないという理由だけでここで削除されます (NULL ELSE がない場合は暗示されます )、削除することで何かが得られるからではありません。




    1. 異なるタイムゾーンで取得された場合、mysqlのタイムスタンプはキャッシュされますか?

    2. SpringBootsapplication.propertiesを使用したJDBCフェッチサイズの最適化

    3. SSRS-式を使用したGroup_Concatと同等ですか?

    4. 関数はSTRICT修飾子なしでより速く実行されますか?