我想读取一个表,其中的值将是 sql 查询结果的列名。
例如,我有 table1 作为 ..
id col1 col2
----------------------
0 name ax
0 name2 bx
0 name3 cx
1 name dx
1 name2 ex
1 name3 fx
如果您看到 id = 0,名称的值为 ax,名称 2 为 bx,名称 3 为 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 语句。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)