使用 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]
这是我的 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]