第一次在这里发帖。我有一个表格,我希望将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
任何提示/建议?我在这个网站上看过很多帖子,而且给别人的帮助也很棒。这是一个很棒的社区!
答案 0 :(得分:3)
假设您使用的是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
答案 1 :(得分:2)
以下是使用条件聚合或交叉表的另一种方法:
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
,请参阅 ARTICLE 。