我想读取一个表,该表的值将是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,则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()聚合之类的方法消除空值并折叠成一行。
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语句。
col1