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