mssql创建将表连接到自身的视图

时间:2014-06-05 14:04:05

标签: sql-server self-join

我有一张表格如下:

itemid      details      color

t001        door         red

t002        gate         green

t002        gate         blue

我想将多种颜色/ itemid的项目组合到一行上。永远不会超过两种颜色

如此理想的输出:

itemid      details      color1     color2

t001        door         red

t002        gate         green      blue

我尝试使用嵌套的select和top 1 bottom 1进行连接,但是无法正常工作

select itemid,t1.color,t2.color
from table1 t1 
join (
select top 1 color
from table1 where iteid=t1,itemid
) t2

欢迎任何建议,

2 个答案:

答案 0 :(得分:2)

你需要的是group_concat()。它有助于显示用逗号分隔的多个值。你也可以将逗号分隔符更改为你想要的任何东西。通过给出一个分隔符关键字.Ex:

  

GROUP_CONCAT(颜色分离器'|')

select itemid,details,group_concat(color) 
from t1 group by itemid

检查输出SQL FIDDLE。希望有所帮助。

答案 1 :(得分:1)

未经测试,但这可能是一种方法:

Select      a.itemid,
            a.details,
            a.color1,
            a.color2
from        (           
            Select      itemid,
                        details,
                        color as color1,
                        (Select color from #table1 as b where b.itemid = a.itemid and b.color <> a.color)   as color2
                        , ROW_NUMBER()   OVER (PARTITION BY itemid ORDER BY details DESC)  rn
            from        #table1     as a
            ) as a
where       a.rn = 1