sql - 根据条件将表中的数据拆分为 2 列
问题描述
必须根据条件将表中的一列拆分为 2。全部在 select 子句中。
我的表有一列作为 detail_code。有 2 个详细代码。我希望每个详细代码在我的选择子句中作为单独的列。
我尝试了子查询,但它抛出子查询返回不止一行。
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'));
推荐阅读
- python - 如何在python3中替换has_key?
- php - 使 if 语句更干燥
- tableau-api - Tableau - 如何显示堆积条形图的图例?
- sql-server - SQL Server 代理作业已成功完成,但未执行 SSIS 包中的 (.appref-ms) 文件
- f# - 将列表中每个元素的值与列表中的每个其他元素进行比较并更新它 (f#)
- jquery - 如何使用 symfony 4 用 Jquery 刷新 div?
- angular - 如何从 .ts 文件中捕获 html 元素?
- android - Android 9 崩溃 minifyEnabled 和 multiDexEnabled
- ffmpeg - 如何合并分段的 webvtt 字幕文件并输出单个文件?
- r - 使用 R + DBI 库 + ODBC 连接到 Teradata Database