问题描述
但我想在每个月的一栏中填写订单号。
订单参考 | 月 | 派对名称 | 物品名称 |
---|---|---|---|
订单 1 | 君 | 供应商 1 | 项目 A |
订单 2 | 君 | 供应商 1 | 项目 B |
订单 3 | 君 | 供应商 2 | 项目 B |
订单 4 | 君 | 供应商 3 | 项目 C |
订单 5 | 七月 | 供应商 4 | 项目 C |
我需要的输出
物品名称 | 一月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 |
---|---|---|---|---|---|---|---|
项目 A | 订单 1 | ||||||
项目 B | 订单 2,订单 3 | ||||||
项目 C | 订单 4 | 订单 5 |
SELECT *
FROM (SELECT [Name Of Item],DATENAME(MONTH,OrderDate) [Month],Count(1)[Ord Ref]
FROM Stock_Master_Pur_Ord_Del
GROUP BY [Name Of Item],OrderDate)) AS MontlySalesData
PIVOT(sum([Ord Ref])
FOR Month IN ([January],[February],[march],[April],[May],[June],[July],[August],[September],[October],[November],[December]) )AS MNamePivot
解决方法
较新版本的 SQL Server(我的意思是四年)支持 string_agg()
。您可以使用条件聚合:
select name_of_item,string_agg(case when month = 'Jan' then ord_ref end) within group (order by ord_ref) as jan,string_agg(case when month = 'Feb' then ord_ref end) within group (order by ord_ref) as feb,string_agg(case when month = 'Mar' then ord_ref end) within group (order by ord_ref) as mar,string_agg(case when month = 'Apr' then ord_ref end) within group (order by ord_ref) as apr,string_agg(case when month = 'May' then ord_ref end) within group (order by ord_ref) as may,string_agg(case when month = 'Jun' then ord_ref end) within group (order by ord_ref) as jun,string_agg(case when month = 'Jul' then ord_ref end) within group (order by ord_ref) as jul
from Stock_Master_Pur_Ord_Del
group by name_of_item;