SQL查询以基于值获取列标题作为值

时间:2018-10-29 07:05:17

标签: oracle

enter image description here我在Oracle DB中有一个表,其中包含输入格式的数据(如随附的图像所示)。

需要将其转换为输出格式(如随附的图片所示)

为清楚起见,如果在XX列,YY列或ZZ列中的值为“ 1”,则该ID必须显示为“角色”(多个唯一行-请参见示例A123)。 另外,如果一个ID有多个“代码”值,则这些值需要显示为“代码:”,并用逗号分隔,如C123 ID所示。

您能帮我写一个查询来获取所需的输出吗?

附加了输入输出图像(Input_Output.png),因为数据在问题中的格式可能不正确。

谢谢。

2 个答案:

答案 0 :(得分:0)

我试图在下面编写此查询,但是没有任何平台可以验证结果:),因为我现在正在训练中。您可以尝试以下查询:

SELECT ID, Name,  'XX' Role FROM yourtable WHERE XX =1 -- To exclude no XX role
union  
SELECT ID, Name, 'YY' Role FROM 
yourtable WHERE YY =1 -- To exclude no YY role
union  
SELECT ID, Name, 'ZZ' Role FROM yourtable WHERE ZZ =1 -- To exclude no ZZ role
union 
SELECT ID, Name, 'Codes: ' || LISTAGG(code, ', ') WITHIN GROUP (ORDER BY code) "Role" FROM yourtable group by ID, Name;

希望此csn帮助您。

答案 1 :(得分:0)

最终查询以供参考:

SELECT ID,NAME,'XX'在TABLENAME中的角色,其中XX = 1 工会
SELECT ID,NAME,'YY'在TABLENAME中的角色,其中YY = 1 工会
SELECT ID,NAME,'ZZ'在TABLENAME中的角色,其中ZZ = 1 联盟 选择ID,NAME,Role ='Codes:',STUFF((选择不同的','+代码来自TABLENAME T1 WHERE T1.ID = T2.ID for XML path('')),1,1,''),TABLENAME T2中的角色