在单行中表示SQL结果-以楼梯台阶结束

在单行中表示SQL结果-以楼梯台阶结束,sql,sql-server,Sql,Sql Server,我有SQL(服务器)中的记录,我试图以可读的方式表示这些记录,但结果不正确 我使用case语句将字段值拉入单独的字段,但在结果中得到一个阶梯。原始行如下所示: w x y z a w x y z b w x y z c w x y z a b c 通过案例陈述,我得出的结论是: w x y z a null null w x y z null b null w x y z null null c 我想得到的是这三条记录的一行,如下所示: w x y z

我有SQL(服务器)中的记录,我试图以可读的方式表示这些记录,但结果不正确
我使用case语句将字段值拉入单独的字段,但在结果中得到一个阶梯。原始行如下所示:

w x y z a 
w x y z b 
w x y z c 
w x y z a b c 

通过案例陈述,我得出的结论是:

w x y z a     null  null 
w x y z null  b     null
w x y z null  null  c 
我想得到的是这三条记录的一行,如下所示:

w x y z a 
w x y z b 
w x y z c 
w x y z a b c 


我做了很多搜索,但我认为我没有用正确的词来描述这个问题。。。任何指示都将不胜感激。提前感谢。

使用
PIVOT

SELECT *
FROM (
  VALUES ('w', 'x', 'y', 'z', 'a'),
         ('w', 'x', 'y', 'z', 'b'),
         ('w', 'x', 'y', 'z', 'c')
) AS t(w, x, y, z, col)
PIVOT (
  MAX(col) FOR col IN ([a], [b], [c])
) AS PivotTable
上述收益率:

w   x   y   z   a   b   c
-------------------------
w   x   y   z   a   b   c

SQL Server(和Oracle)中的上述数据透视本质上是以下等效查询的缩写:

SELECT 
  w, x, y, z, 
  MAX(CASE WHEN col = 'a' THEN 'a' END) a,
  MAX(CASE WHEN col = 'b' THEN 'b' END) b,
  MAX(CASE WHEN col = 'c' THEN 'c' END) c
FROM (
  VALUES ('w', 'x', 'y', 'z', 'a'),
         ('w', 'x', 'y', 'z', 'b'),
         ('w', 'x', 'y', 'z', 'c')
) AS t(w, x, y, z, col)
GROUP BY w, x, y, z

另一种方法是,通过从结果中选择所需的行来完成,而不使用
PIVOT
CASE
——当然,这些方法没有错。它使用自连接

select * from
   (select x1.*, x2.valA as valA2, x3.valA as valA3  
    from foo x1 inner join foo x2 inner join foo x3
    on     x1.valA <> x2.valA
       and x1.valA <> x3.valA
       and x2.valA <> x3.valA) as x
order by valA, valA2, valA3

那么,您想连接不同元组中的最后一列,以便第一列匹配吗?可能很幼稚,但你可以想象它们是
wxyza wxyzb wxyzc
…起作用了!非常感谢。