如何在 SQL Server 中使用 STUFF 函数获取值

问题描述

我正在使用下面的代码,这给了我不。每月订单数量

但我想在每个月的一栏中填写订单号。

订单参考 派对名称 物品名称
订单 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;