【发布时间】:2011-02-03 01:50:05
【问题描述】:
我刚刚开始学习 T-SQL,并且可以使用一些帮助来理解特定代码块中发生的事情。我在an answer I received in a previous question修改了一些代码,这里是有问题的代码:
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 语句中将多个值放入单个字符串中的。如果没有分配给@column_list,SELECT 语句将简单地返回多行。通过在SELECT 语句中包含变量,结果如何“扁平化”为一个值?我应该如何阅读此 T-SQL 才能正确理解发生了什么?
【问题讨论】:
标签: sql sql-server sql-server-2005 tsql dynamic-sql