透视使用2个表

时间:2015-02-25 03:12:15

标签: mysql sql sql-server pivot

第一次在这里发帖。我有一个表格,我希望将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

任何提示/建议?我在这个网站上看过很多帖子,而且给别人的帮助也很棒。这是一个很棒的社区!

2 个答案:

答案 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

要比较两种方法:PIVOTCrosstab,请参阅 ARTICLE