我的表格中有以下数据
ID SOURCE TARGET TEL1 TELE1 TELE2
---------------------------------------------------------------------------------
1 TEL TEL1 5RBTTX4016/8
1 TEL TEL1 5RBTTX4018
1 TEL TEL1 5RBTTX4016
我希望数据分布在空白的列中。我希望所需的输出如下所示。
ID SOURCE TARGET TEL1 TELE1 TELE2
--------------------------------------------------------------------------------------------------
1 TEL TEL1 5RBTTX4016/8
1 TEL TELE1 5RBTTX4018
1 TEL TELE2 5RBTTX4016
OR
如下所示保持单身也可以:
ID SOURCE TARGET TEL1 TELE1 TELE2
----------------------------------------------------------------------------------------------------------------
1 TEL TEL1,TELE1,TELE2 5RBTTX4016/8 5RBTTX4016 5RBTTX4018
IMP-请注意,由于数据将移动到其他列,因此将在“TARGET”列中捕获列名称。 我有大约100个这样的ID。 ID = 1只是一个例子。
我试过了:
SELECT id,COALESCE(NULLIF(TEL1,''), TELE3)
FROM table_name
我怎样才能做到这一点?
答案 0 :(得分:0)
如果数据目标是行号
ID SOURCE TARGET TEL1 TELE1 TELE2
---------------------------------------------------------------------------------
1 TEL TEL1 5RBTTX4016/8
1 TEL TELE1 5RBTTX4018
1 TEL TELE2 5RBTTX4016
然后您可以使用以下查询:
SELECT
ID,[SOURCE],STRING_AGG([TARGET], ', ') AS [TARGET],
MAX(CASE WHEN [TARGET] = 'TEL1' THEN [TEL1] ELSE NULL END) AS TEL1,
MAX(CASE WHEN [TARGET] = 'TELE1' THEN [TEL1] ELSE NULL END) AS TELE1,
MAX(CASE WHEN [TARGET] = 'TELE2' THEN [TEL1] ELSE NULL END) AS TELE2
FROM
Mytable
GROUP BY
ID,[SOURCE]