如何根据列值在单个列中显示多个表的列?
答
SELECT Grade AS ISG,
P1AR, P1SM1, P1SM2,
P2AR, P2SM1, P2SM2,
P3AR, P3SM1, P3SM2
FROM
(
SELECT Grade,
col = 'P' + CAST(Process AS NVARCHAR) +col,
value
FROM yourTable
CROSS APPLY
(
VALUES
('AR', AR),
('SM1', SM1),
('SM2', SM2)
) c(col, value)
) d
PIVOT
(
MAX(value)
FOR col IN (P1AR, P1SM1, P1SM2,
P2AR, P2SM1, P2SM2,
P3AR, P3SM1, P3SM2)
) piv
答
另一种方式来写这个查询:
SELECT
a.Grade AS ISG,
a.AR AS P1AR,
a.SM1 AS P1SM1,
a.SM2 AS P1SM2,
b.AR AS P2AR,
b.SM1 AS P2SM1,
b.SM2 AS P2SM2,
c.AR AS P3AR,
c.SM1 AS P3SM1,
c.SM2 AS P3SM2
FROM yourTable a
INNER JOIN yourTable b
ON a.Grade = b.Grade
INNER JOIN yourTable c
ON a.Grade = c.Grade
where a.Process = 1 and
b.Process = 2 and
c.Process = 3
这是在表示层... SQL-服务器较好地解决了不允许与*列组*,其中有一些像一个结果a * meta-header * ...您不能一次又一次地使用同一个列名,(至少如果您想在任何嵌入式上下文中使用此结果集)。 – Shnugo
**请!**:请勿插入图片!如果有人想帮助你,你必须手动键入你的数据。请阅读[如何创建一个MCVE](http://stackoverflow.com/help/mcve) – Shnugo
@Shnugo谢谢你。如果你知道我的问题,请删除标题并给我一个答案。我只想要数据,而不是标题 – Mohsen