【发布时间】:2015-07-28 01:42:20
【问题描述】:
我正在尝试按日期对输出进行分组。对于此表中的每个条目,每个唯一样式(N 种样式)都有订单详细信息行,其中包含订单日期和发货数量。我的目标是在每行中输出带有日期、样式和相关订单日期和发货总数的标题。现在,我为每个详细信息行而不是汇总行。我试过group by order_date, '+@PivotColumns+' 但这不起作用。我当然不能只做group by order_date。我是否需要对结果进行另一次查询?
DECLARE @SQLQuery AS NVARCHAR(MAX)
DECLARE @PivotColumns AS NVARCHAR(MAX)
SELECT @PivotColumns= COALESCE(@PivotColumns + ',','') + QUOTENAME(rtrim(style))
FROM (SELECT DISTINCT style FROM opendet where isnumeric(style)=1 and season='ESSENTIALS') AS stylepivot
SET @SQLQuery = N'
select
order_date,'+@PivotColumns+'
FROM opendet
PIVOT(
SUM(SHIP_QTY)
FOR style IN ('+@PivotColumns+')
) AS P'
EXEC sp_executesql @SQLQuery
这就是我现在得到的:
order_date 15080 15082 15083
2012-12-12 1 NULL NULL
2012-12-13 NULL 1 NULL
2012-12-13 NULL 2 NULL
2012-12-14 NULL NULL 1
2012-12-14 NULL NULL 1
2012-12-15 NULL NULL NULL
2012-12-16 1 NULL NULL
2012-12-16 4 NULL NULL
2012-12-16 3 NULL NULL
这就是我想要的:
order_date 15080 15082 15083
2012-12-12 1 NULL NULL
2012-12-13 NULL 3 NULL
2012-12-14 NULL NULL 2
2012-12-15 NULL NULL NULL
2012-12-16 8 NULL NULL
这里是源表的修剪摘录,(还有更多列):
order_date style season ship_qty
2014-01-06 15082 ESSENTIALS 2.00
2014-01-06 15082 ESSENTIALS 1.00
2014-01-06 15082 ESSENTIALS 1.00
2014-01-06 15082 ESSENTIALS 2.00
2014-01-08 15080 ESSENTIALS 1.00
2014-01-08 15080 ESSENTIALS 1.00
2014-01-08 15080 ESSENTIALS 1.00
2014-01-08 15080 ESSENTIALS 1.00
2014-01-08 15082 ESSENTIALS 2.00
2014-01-08 15082 ESSENTIALS 2.00
2014-01-08 15082 ESSENTIALS 2.00
【问题讨论】:
-
能否添加示例数据和预期结果
-
完成。我在一开始就考虑添加它。
-
SQL fiddle 会让其他人更容易尝试和测试
-
你的
order_date字段是什么数据类型? -
另外,如果您不想在最终报告表中混合相应列,请不要忘记在
@PivotColumns构建查询中订购styles
标签: sql sql-server sql-server-2008