首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据条件将表中的数据拆分为2列

根据条件将表中的数据拆分为2列
EN

Stack Overflow用户
提问于 2019-10-25 04:23:16
回答 1查看 168关注 0票数 0

必须根据select子句中的conditions.All将表中的一列拆分为2列。

我的表有一列detail_code。有两个细节代码,.I希望每个细节代码在我的select子句中都作为单独的列。

我尝试了subquery,但它抛出了多行的subquery返回。

代码语言:javascript
复制
select id,(select detail_code from detc where type_ind ='C')as Detail_code1,
        (select detail_code from detc where type_ind ='P')as Detail_code2,
        (Select sum(amount) from amount_tbl where detail_code in (select detail_code from detc where type_ind ='C')and term_code='2019')as amt_detail_code1 
        from id_table;

我的输出应该是

代码语言:javascript
复制
Id  Detail_code1  Detail_code2  sum(amt_Detail_Code1)  sum(amt_Detail_code2)
1          C                P                  15                  45
2          C                P                 785                  74

我的输入

代码语言:javascript
复制
ID     Detail_cd   ind  amt
317002687   CA20    C   3
317002687   CA21    C   60
317002687   CA23    C   18.75
317002687   CA25    C   179.64
317002687   CA26    C   136.5
317002687   CA27    C   8.25
317002687   CA28    C   4
317002687   CA2B    C   8
317002687   CA2H    C   6.75
317002687   CA2I    C   237
317002687   CA2J    C   65.4
EN

回答 1

Stack Overflow用户

发布于 2019-10-25 22:25:23

此查询将生成您所描述的输出:

代码语言:javascript
复制
SELECT id, 'C' AS detail_code1, 'P' AS detail_code2,
       SUM(CASE WHEN ind = 'C' THEN amt END) AS sum_detail_code1,
       SUM(CASE WHEN ind = 'P' THEN amt END) AS sum_detail_code2
FROM name_of_your_input_table
GROUP BY id;

或者,由于您知道两个详细信息代码是什么,因此可以将它们作为列名,并将每列的值作为该详细信息代码的平均值。要做到这一点,一种方法是旋转。下面是Oracle的语法:

代码语言:javascript
复制
SELECT *
FROM (SELECT id, ind AS detail_code, amt
      FROM name_of_your_input_table)
PIVOT (AVG(amt)
       FOR detail_code IN ('C', 'P'));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58548662

复制
相关文章

相似问题

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