【问题标题】:Flat to fat: sql column to multiple columns based on conditionFlat to fat:根据条件将sql列转换为多列
【发布时间】:2022-11-10 22:07:05
【问题描述】:

有没有办法创建一个数据透视表,根据一些 if 条件(从平面表到胖表)将单列转换为多列?

CREATE TABLE table_name (A,B,C,D) AS
  SELECT 'A', '1', '4', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'A', '1', '6', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'A', '2', '1', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'B', '1', '20', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'B', '2', '2', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'B', '-3', '999', DATE '2000-01-04' FROM DUAL UNION ALL
  SELECT 'A', '1', '30', DATE '2000-01-05' FROM DUAL UNION ALL
  SELECT 'B', '2', '3', DATE '2001-01-05' FROM DUAL;

每列 A 和 D 的预期结果

A, D, C where B == 1, C where B == 2
A, 2000-01-04, 10, 1
B, 2000-01-04, 20, 2
A, 2000-01-05, 30, 0
B, 2000-01-05, 0, 3

或每列 D

D, C where B == 1 - C where B == 2
2000-01-04, 27
2000-01-05, 27

【问题讨论】:

    标签: sql oracle if-statement pivot


    【解决方案1】:

    你可以做:

    select
      a,
      d,
      max(case when b = 1 then c end) as b1,
      max(case when b = 2 then c end) as b2
    from table_name
    group by a, d
    

    和:

    select
      d,
      max(case when b = 1 then c end) -
      max(case when b = 2 then c end) as x
    from table_name
    group by d
    

    请参阅db<>fiddle 的运行示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多