我想读取一个表,该表的值将是sql查询结果的列名。例如,我将table1作为..
0 name ax 0 name2 bx 0 name3 cx 1 name dx 1 name2 ex 1 name3 fx
如果看到id = 0,则name的值为ax,name2为bx,name3为cx。将行显示为id,name,name2,name3而不是行。现在,我希望查询结果看起来像这样:
id name name2 name3 0 ax bx cx 1 dx ex fx 有人可以帮助我实现这一目标吗?
这是通过数据透视表完成的。按分组id,您CASE为要在列中捕获的每个值发出语句,并使用诸如MAX()聚合之类的方法消除空值并折叠成一行。
SELECT id, /* if col1 matches the name string of this CASE, return col2, otherwise return NULL / / Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */ MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name, MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2, MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3 FROM yourtable GROUP BY id ORDER BY id 这是一个工作样本 注意:这仅适用于有限且已知数量的可能值col1。如果可能值的数量未知,则需要在循环中动态构建SQL语句。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。