首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用2个表的数据透视

使用2个表的数据透视
EN

Stack Overflow用户
提问于 2015-02-25 11:12:15
回答 2查看 40关注 0票数 2

第一次在这里发帖。我有一个表,我想要透视TEST_NAME,以便它们出现在每个SAMPLE_NUMBER的一行上。表中的示例数据如下所示:

代码语言:javascript
运行
复制
SAMPLE_NUMBER    TEST_NAME     TESTING_ORDER
12345            KF             1
12345            TAN            2
12345            V40            3
67890            S              1
67890            V100           2
67890            FTIR           3

我希望我的查询输出为:

代码语言:javascript
运行
复制
12345  KF  TAN  V40
67890  S  V100  FTIR

但我的查询给出了以下输出:

代码语言:javascript
运行
复制
12345  <null>  <null>  <null>
67890  <null>  <null>  <null>

下面是我的问题:

代码语言:javascript
运行
复制
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

有什么建议吗?我在这个网站上读了很多帖子,得到的帮助令人惊叹。这是一个很棒的社区!

EN

回答 2

Stack Overflow用户

发布于 2015-02-25 11:21:39

假设您使用的是SQL Server,我认为您需要这样的东西:

代码语言:javascript
运行
复制
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
票数 3
EN

Stack Overflow用户

发布于 2015-02-25 11:23:37

这是另一种使用条件聚合或交叉表的方法:

代码语言:javascript
运行
复制
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这两种方法之间的比较,请参阅此。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28710466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档