第一次在这里发帖。我有一个表,我想要透视TEST_NAME
,以便它们出现在每个SAMPLE_NUMBER
的一行上。表中的示例数据如下所示:
SAMPLE_NUMBER TEST_NAME TESTING_ORDER
12345 KF 1
12345 TAN 2
12345 V40 3
67890 S 1
67890 V100 2
67890 FTIR 3
我希望我的查询输出为:
12345 KF TAN V40
67890 S V100 FTIR
但我的查询给出了以下输出:
12345 <null> <null> <null>
67890 <null> <null> <null>
下面是我的问题:
SELECT *
FROM
(
SELECT
SAMPLE_NUMBER,
TEST_NAME,
TESTING_ORDER
FROM TEST where SAMPLE_NUMBER in (12345, 67890)
)src
PIVOT
(
MAX(ORDER_NUMBER)
FOR ANALYSIS IN (1, 2, 3)
)pvt
有什么建议吗?我在这个网站上读了很多帖子,得到的帮助令人惊叹。这是一个很棒的社区!
发布于 2015-02-25 11:21:39
假设您使用的是SQL Server,我认为您需要这样的东西:
SELECT SAMPLE_NUMBER, [1], [2], [3]
FROM (SELECT SAMPLE_NUMBER, TEST_NAME, TESTING_ORDER
FROM TEST
WHERE SAMPLE_NUMBER in (12345, 67890)
) src
PIVOT (MAX(TEST_NAME) FOR TESTING_ORDER IN (1, 2, 3) ) pvt
发布于 2015-02-25 11:23:37
这是另一种使用条件聚合或交叉表的方法:
SELECT
Sample_Number,
[1] = MAX(CASE WHEN Testing_Order = 1 THEN Test_Name END),
[2] = MAX(CASE WHEN Testing_Order = 2 THEN Test_Name END),
[3] = MAX(CASE WHEN Testing_Order = 3 THEN Test_Name END)
FROM Test
GROUP BY Sample_Number
有关PIVOT
和Crosstab
这两种方法之间的比较,请参阅此。
https://stackoverflow.com/questions/28710466
复制相似问题