SQL-根据第二/第三列将一个结果列拆分为2

时间:2014-02-05 16:26:55

标签: sql sql-server sql-server-2008

我有这个巨大的表(不是我自己制作的),其中数据已被倾倒,结构非常少。它有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,我尝试将这两个表创建为视图,但我一直收到错误消息: “创建视图必须是批处理中的唯一语句”

非常感谢任何帮助。

由于

1 个答案:

答案 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;