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

演示:

您正在使用哪个数据库