我有这个巨大的表(不是我自己制作的),其中数据已被倾倒,结构非常少。它有5列a b c d e,在这种情况下只有a,b和c感兴趣。 a是一个int id列(不是唯一的) b是attrib_code(字符串) c是attrib_val(任何int,string,null等)
我的问题是我试图根据where子句获得两列答案,但两列都是列c的子集。
我希望我的第一列是
的结果SELECT attrib_val (and if nessisary id)
FROM table_name
WHERE attrib_code = 'stringA'
第二栏
SELECT attrib_val (and if nessisary id)
FROM table_name
WHERE attrib_code = 'stringB'
其中id = id
我正在使用Microsoft SQL Server Management Studio 2008,我尝试将这两个表创建为视图,但我一直收到错误消息: “创建视图必须是批处理中的唯一语句”
非常感谢任何帮助。
由于
答案 0 :(得分:0)
您可以使用join
:
SELECT coalesce(ta.id, tb.id) as id, ta.attrib_val as aval, tb.attrib_val as bval
from (select ta.*
from table_name ta
where ta.attrib_code = 'stringA'
) ta full outer join
(select tb.*
from table_name tb
where tb.attrib_code = 'stringB'
) tb
on ta.id = tb.id ;
完整的外部联接允许您获得只有一个值集的id
。
您也可以使用条件聚合执行此操作:
select id,
max(case when attrib_code = 'stringA' then attrib_value end) as aval,
max(case when attrib_code = 'stringG' then attrib_value end) as bval
from table_name
where attrib_code in ('stringA', 'stringB')
group by id;