使用 SQL 组合列和行来构建报告?

Build a report with SQL with combining columns and rows?

这是我的 table:

Table购买报告

PURC_ID CUS_ID Product QTY Date
1 John Leg_01 2 2021-04-09
2 John Head_01 1 2021-04-09
3 Dawn Head_01 1 2021-04-09
4 Dawn Shoulder_01 2 2021-04-09
5 Dawn Leg_01 1 2021-04-09
6 Keith Leg_01 2 2021-04-09

我想按如下方式构建报告:

Table 4:(PURC table 将与其他列合并。我需要产品代码后跟下划线后跟数量)。

REP_ID Cust PURC Date
1 John Head_01_1, Leg_01_2 2021-04-09
2 Dawn Head_01_1, Shoulder_01_2, Leg_01_1 2021-04-09
3 Keith Leg_01_2 2021-04-09

我知道如何加入 table,但我不确定如何以这种格式合并。非常感谢任何帮助。

您可以使用这样的查询:

SELECT
  Cust, STRING_AGG(Product + '_' + CAST(QTY AS varchar(10)), ', ') AS PURC, Date 
FROM PURC_Table 
GROUP BY Cust, Date

注意:STRING_AGG() 在 SQL Server 2017 及更高版本上受支持。

下面应该会给你想要的输出

select row_number() over(order by avg(purc_id)) REP_ID,
  CUS_ID Cust,
  string_agg(product + '_' + cast(Qty as varchar(2)),', ') PURC,
  [Date]
from PurchaseReport
group by CUS_ID, [Date]

第一列似乎是基于最小值purc_id。对于concatenated column,其他答案都可以,但是concat()更方便:

select row_number() over (order by min(purc_id)) as rep_id
       cus_id as Cust,
       string_agg(concat(product, '_', qty), ', ') as purc,
       [Date]
from PurchaseReport
group by cus_id, [Date]