我刚刚开始学习 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 代码完全符合我的要求,即根据查询结果生成单个结果,然后在另一个查询中使用该结果。
但是,我无法弄清楚该语句如何通过在SELECT @column_list =...
语句中将多个值放入单个字符串中SELECT
。如果没有分配 to @column_list
,该SELECT
语句将简单地返回多行。如何通过在SELECT
语句中使用变量将结果“扁平化”为一个值?我应该如何阅读此 T-SQL 以正确理解发生了什么?