【问题标题】:UNPIVOT - DB2 SQLUNPIVOT - DB2 SQL
【发布时间】:2021-05-27 16:53:50
【问题描述】:

我有如下数据

ROW_ID    Col0           Col1    Col2    Col3    
1         05/22/2020      123     ABC     1
2         05/12/2020      DEF     1       2
3         06/13/2020      PRR     N1      4

我正在寻找数据将很少转换的输出,然后如下所示将被取消旋转

ROW_ID  COLUMN_NAME  VALUE
1       Col0         05/22/2020
1       Drv_Col0     May-2020
1       Col1         123
1       Col2         ABC
1       Col3         1
1       Sum_Col3     3
2       Col0         05/12/2020
2       Drv_Col0     May-2020
2       Col1         DEF
2       Col2         1
2       Col3         2
2       Sum_Col3     3
3       Col0         06/13/2020
3       Drv_Col0     Jun-2020
3       Col1         PRR
3       Col2         N1
3       Col3         4
3       Sum_Col3     4

【问题讨论】:

标签: sql db2 unpivot


【解决方案1】:

您可以使用横向连接。假设列都具有相同的类型:

select t.row_id, v.*
from t cross join lateral
     (values ('Col0', col0),
             ('Drv_Col0', to_char(col0, 'MON-YYYY'),
             ('Col1', col1),
             ('Col2', col2),
             ('Col3', col3),
             ('Sum_Col3', ???)
     ) v(column_name, value);

注意:您可能需要强制转换列,以便它们都是字符串。

问题没有具体说明sum_col3是如何定义的,定义也不明显。但是有些表达可以去那里。

【讨论】:

  • 您如何处理 Col3 的 SUM
  • @KoushikChandra 。 . .我什至没有在问题中看到它。也就是说,问题是如何定义的不清楚,所以我不知道表达式是什么。
  • 我收到错误 - 对应列的数据类型不兼容。对于我的示例 Col0 是 DATE 而 Col3 是 BIGINT
  • @KoushikChandra 。 . .答案指定您可能需要将值转换为常见类型,例如字符串。您的问题没有具体说明类型是什么,因此您可以找出转换为字符串的正确方法。
猜你喜欢
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多