从行创建/透视列并创建透视后,我想在 SQL 中新创建的列中添加不同列的值

Posted

技术标签:

【中文标题】从行创建/透视列并创建透视后,我想在 SQL 中新创建的列中添加不同列的值【英文标题】:Creating/Pivoting columns from Rows and Once Pivot created, I want to add values of different columns in the newly created column in SQL 【发布时间】:2020-09-16 19:01:00 【问题描述】:

[我不允许复制图像,所以下面的链接有INout和Output1的图像

输入:

ColumnA   ColumnB  ColumnC  ColumnD 
1          India     DX       100  
2          India      AB       200
3          Aus       DX         300
4          Ger        BC        400

输出:

ColumnA  India  Aus  Ger  ColumnD
1         DX     -     -    100
2         AB     -      -    200
3         -      DX     -     300
4         -      -      BC     400

【问题讨论】:

考虑处理应用代码中数据显示的问题 【参考方案1】:

您可以使用case 表达式来做到这一点:

select columna, 
    case when columnb = 'India' then columnc else '-' end india,
    case when columnb = 'Aus'   then columnc else '-' end aus,
    case when columnb = 'Ger'   then columnc else '-' end ger,
    columnd
from mytable

您的示例数据未显示,但您可能希望按columna 聚合:

select columna, 
    coalesce(max(case when columnb = 'India' then columnc end), '-') india,
    coalesce(max(case when columnb = 'Aus'   then columnc end), '-') aus,
    coalesce(max(case when columnb = 'Ger'   then columnc end), '-') ger
from mytable
group by columna

【讨论】:

@ GMB,工作。谢谢你。有没有一种方法可以为 50 多个国家/地区动态编码? @rockstar:没有铅,那是我的错字。不,纯SQ没有短板,你需要重复max()表达式来处理更多的国家。

以上是关于从行创建/透视列并创建透视后,我想在 SQL 中新创建的列中添加不同列的值的主要内容,如果未能解决你的问题,请参考以下文章

使用连接创建动态数据透视表列表

如何在 MySQL 中为每个类别创建一个 SQL 窗口函数列?

如何使用数据透视表 Python 创建重复行

Oracle 11g:取消透视多个列并包含列名

动态透视查询查看/存储过程?

SQL - 为未透视数据创建属性输出