SQL:将两个表中的数据转换为一次转换一行
在下面的场景中,我需要帮助来获取输出表 共有两个表格:SQL:将两个表中的数据转换为一次转换一行,sql,Sql,在下面的场景中,我需要帮助来获取输出表 共有两个表格: 1. Table Name : TRNNUM Field Name : TRNID 2. Table Name : TRNPRD Field Name : TRNID, PRDID 表格样本: Table TRNNUM TRNID ----- 1234 2565 3458 Table TRNPRD TRNID PRDID ----- ----- 1234 AA 1234 BB 1234
1. Table Name : TRNNUM Field Name : TRNID
2. Table Name : TRNPRD Field Name : TRNID, PRDID
表格样本:
Table TRNNUM
TRNID
-----
1234
2565
3458
Table TRNPRD
TRNID PRDID
----- -----
1234 AA
1234 BB
1234 CC
2565 CC
2565 EE
2565 FF
2565 HH
3458 AA
3458 BB
期望输出为:
TempTable
TRNID PRDID PRDSEQ
----- ----- ------
1234 AA START
1234 BB START:AA
1234 CC START:AA:BB
2565 CC START
2565 EE START:CC
2565 FF START:CC:EE
2565 HH START:CC:EE:FF
3458 AA START
3458 BB START:AA
你能给我提个建议吗
提前感谢解决方案会因数据库而异,如果使用
MySQL
您可以使用GROUP\u CONCAT()
和自连接:
SELECT a.TRNID,a.PRDID
,COALESCE(CONCAT('START:',GROUP_CONCAT(b.PRDID)),'START') AS PRDSEQ
FROM Table1 a
LEFT JOIN Table1 b
ON a.TRNID = b.TRNID
AND a.PRDID > b.PRDID
GROUP BY a.TRNID,a.PRDID
ORDER BY a.TRNID,a.PRDID
演示:
如果使用SQL Server,则可以使用递归cte:
;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY TRNID ORDER BY PRDID) AS RN
FROM Table1
)
,cte2 AS (SELECT TRNID
,PRDID
,CAST('START' AS VARCHAR(MAX)) AS PRDSEQ
,RN
FROM cte
WHERE RN = 1
UNION ALL
SELECT a.TRNID
,a.PRDID
,CAST(b.PRDSEQ + ',' + b.PRDID AS VARCHAR(MAX)) AS PRDSEQ
,a.RN
FROM cte a
JOIN cte2 b
ON a.TRNID = b.TRNID
AND a.RN = b.RN + 1
)
SELECT TRNID,PRDID,REPLACE(PRDSEQ,'START,','START:') AS PRDSEQ
FROM Cte2
ORDER BY TRNID,PRDID
演示:您正在使用哪个数据库