1

持っていた一連のデータをピボットする方法を理解する必要があり、コードは必要に応じて機能しますが、問題は、それがなぜなのかよくわからないことです。誰でも新人を助けて、以下のコードが「SELECT @columns = COALESCE + ...」に決定した理由を正確に説明できますか?

彼が COALESCE 関数で 2 つの引数を指定するのはなぜですか? そのテーブルのすべての列を返すだけですか? もしそうなら、誰かがそれがどのようにそれを行うかを正確に分析できますか. このコードは、参照としてこの Web サイトから取得しています: ( http://www.tsqltutorials.com/pivot.php )

前もって感謝します!

DECLARE @columns VARCHAR(8000)

SELECT @columns = COALESCE(@columns + ',[' + cast(Variable as varchar) + ']',
'[' + cast(Variable as varchar)+ ']')
FROM #temp123
GROUP BY Variable


DECLARE @query VARCHAR(8000)

SET @query = '
SELECT *
FROM #temp123
PIVOT
(
MAX(VaribleValue)
FOR [Variable]
IN (' + @columns + ')
)
AS p'

EXECUTE(@query)
4

1 に答える 1

1

コードの構造から、クエリが動的な PIVOT 用に設計されていることがわかります。これは、列の数が変化する可能性があることを意味します。ピボットする正確な列を指定する必要がある従来のPIVOTとは異なります

COALESCEキーワードはISNULL関数に似ていますが、主な違いは、チェックする複数の値を指定できることです。

したがって、たとえば次のように使用できますSELECT COALESCE(NULL, NULL, 1, NULL) AS [Output];[出力] の値は 1 になります。最初の値が NULL の場合と同じです。次を返します。2 番目の値が NULL の場合。3 番目を使用します。というように、最初の非 NULL 値が見つかるまで続きます。

したがって、あなたの場合、キーワードはフィールドに追加されCOALESCEた変数をチェックします。NULL の場合 (フィールドのいずれかの値が NULL の場合に発生する可能性があります)、単に次のステートメントを使用します。@columnsVariableVariable

于 2013-08-16T00:24:33.557 に答える