我需要帮助才能在以下场景中获得输出表
有2个表:
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
你能否提出建议。
提前致谢
答案 0 :(得分:2)
解决方案因数据库而异,如果使用MySQL
您可以使用GROUP_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 Fiddle
如果使用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
演示:SQL Fiddle