在单行中表示SQL结果-以楼梯台阶结束
我有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
我使用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
…起作用了!非常感谢。