Ben*_*ack 9 sql t-sql sql-server sql-server-2005 dynamic-sql
我有一个查询,我正在尝试将行行值转换为列名称,目前我正在使用SUM(Case...) As 'ColumnName'语句,如下所示:
SELECT
SKU1,
SUM(Case When Sku2=157 Then Quantity Else 0 End) As '157',
SUM(Case When Sku2=158 Then Quantity Else 0 End) As '158',
SUM(Case When Sku2=167 Then Quantity Else 0 End) As '167'
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
Run Code Online (Sandbox Code Playgroud)
以上查询效果很好,并且完全符合我的需要.但是,我正在SUM(Case...根据以下查询的结果手写出语句:
Select Distinct Sku2 From OrderDetailDeliveryReview
Run Code Online (Sandbox Code Playgroud)
有没有办法在存储过程中使用T-SQL,我可以SUM(Case...从Select Distinct Sku2 From OrderDetailDeliveryReview查询中动态生成语句,然后执行生成的SQL代码?
Cad*_*oux 11
多年来,通过从元数据生成动态透视SQL,已经回答了很多这些,请看一下这些示例:
在您的特定情况下(使用ANSI数据透视而不是SQL Server 2005的PIVOT功能):
DECLARE @template AS varchar(max)
SET @template = 'SELECT
SKU1
{COLUMN_LIST}
FROM
OrderDetailDeliveryReview
Group By
OrderShipToID,
DeliveryDate,
SKU1
'
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) + '],'
FROM OrderDetailDeliveryReview
GROUP BY Sku2
ORDER BY Sku2
Set @column_list = Left(@column_list,Len(@column_list)-1)
SET @template = REPLACE(@template, '{COLUMN_LIST}', @column_list)
EXEC (@template)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57242 次 |
| 最近记录: |