Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据条件将表中的数据拆分为两列_Sql_Oracle - Fatal编程技术网

Sql 根据条件将表中的数据拆分为两列

Sql 根据条件将表中的数据拆分为两列,sql,oracle,Sql,Oracle,根据条件将我表中的一列拆分为2。全部在select子句中 我的表格有一列作为详细信息代码。共有2个详细代码。我希望每个详细代码在select子句中作为一个单独的列 我尝试了子查询,但它抛出子查询并返回多行 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_co

根据条件将我表中的一列拆分为2。全部在select子句中

我的表格有一列作为详细信息代码。共有2个详细代码。我希望每个详细代码在select子句中作为一个单独的列

我尝试了子查询,但它抛出子查询并返回多行

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;
我的输出应该是

Id  Detail_code1  Detail_code2  sum(amt_Detail_Code1)  sum(amt_Detail_code2)
1          C                P                  15                  45
2          C                P                 785                  74
我的意见

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

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

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语法:

SELECT *
FROM (SELECT id, ind AS detail_code, amt
      FROM name_of_your_input_table)
PIVOT (AVG(amt)
       FOR detail_code IN ('C', 'P'));

如果你也发布输入数据的样本,那会有帮助。恐怕那是不可读的。请在问题本身中以正确的格式发布(编辑)。您认为如何?此外,您发布的内容与您之前编写的代码(
select
statement)不匹配,因此很难猜测您真正想要什么。如果源和目标之间存在关系,则更容易提供帮助。我建议你再试一次;不要像不想得到帮助一样发布信息。输入表的哪些行应汇总在输出表的第一行,输入表的哪些行应汇总在输出表的第二行?(即,在输出表中id 1和2是什么意思?)。。。在我的select中,我在我的详细代码上应用了一个透视,然后在金额上应用了一个总和作为两个子查询