相关疑难解决方法(0)

动态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代码?

sql t-sql sql-server sql-server-2005 dynamic-sql

9
推荐指数
1
解决办法
6万
查看次数

SQL Dynamic Pivot - 如何对列进行排序

我正在对包含以下内容的表进行动态数据透视查询:

  • OID - OrderID
  • 尺寸 - 产品尺寸
  • BucketNum - 大小的顺序
  • 数量 - 订购了多少

size列包含不同的大小,具体取决于OID.

所以,使用这里找到的代码,我把它放在一起:

DECLARE @listCol VARCHAR(2000)
DECLARE @query VARCHAR(4000)

SELECT  @listCol = STUFF(( SELECT distinct  '], [' + [size]
                           FROM     #t
                         FOR
                           XML PATH('')
                         ), 1, 2, '') + ']'


SET @query = 'SELECT * FROM
      (SELECT OID,  [size], [quantity]
            FROM #t 
            ) src
PIVOT (SUM(quantity) FOR Size
IN (' + @listCol + ')) AS pvt'


EXECUTE ( @query )
Run Code Online (Sandbox Code Playgroud)

除了列标题(大小标签)不在基于bucketnum列的顺序之外,这种方法很有效.这些是基于尺寸的顺序.

我在枢轴后尝试了可选的Order By,但这不起作用.

如何控制列的显示顺序?

谢谢

pivot sql-server-2005 dynamic-pivot

7
推荐指数
1
解决办法
3万
查看次数