私は T-SQL を学び始めたばかりで、特定のコード ブロックで何が起こっているのかを理解するのに役立つかもしれません。以前の質問で受け取った回答の一部のコードを変更しました。問題のコードは次のとおりです。
DECLARE @column_list AS varchar(max)
SELECT @column_list = COALESCE(@column_list, ',') +
'SUM(Case When Sku2=' + CONVERT(varchar, Sku2) +
' Then Quantity Else 0 End) As [' +
CONVERT(varchar, Sku2) + ' - ' +
Convert(varchar,Description) +'],'
FROM OrderDetailDeliveryReview
Inner Join InvMast on SKU2 = SKU and LocationTypeID=4
GROUP BY Sku2 , Description
ORDER BY Sku2
Set @column_list = Left(@column_list,Len(@column_list)-1)
Select @column_list
----------------------------------------
1 row is returned:
,SUM(Case When Sku2=157 Then Quantity Else 0 End) As [157 -..., SUM(Case ...
T-SQL コードは、クエリの結果に基づいて 1 つの結果を作成し、それを別のクエリで使用するという、まさに私が望んでいることを実行します。
SELECT @column_list =...
ただし、ステートメント内にあることで、ステートメントが複数の値を単一の文字列に入れる方法を理解できませんSELECT
。への代入がなければ@column_list
、SELECT
ステートメントは単純に複数の行を返します。SELECT
結果が 1 つの値に "平坦化" されるというステートメント内に変数を含めることは、どのように行われるのでしょうか? 何が起こっているのかを正しく理解するには、この T-SQL をどのように読むべきですか?