【问题标题】:SQL Server : transpose multiple columns [duplicate]SQL Server:转置多列[重复]
【发布时间】:2015-10-30 05:35:56
【问题描述】:

从这个输入到输出的最佳方式是什么?

输入:

date        id      name    info    price   qty
-----------------------------------------------
20140523    10036   ABC     B       12      100
20140523    10036   ABC     S       13      75
20140523    10034   XYZ     B       22      56
20140523    10034   XYZ     S       24      41
20151023    10037   PQR     B       30      45
20151023    10037   PQR     S       5       20

输出:

date        id      name    b_price b_qty   s_price s_qty
---------------------------------------------------------
20140523    10036   ABC     12      100     13      75
20140523    10034   XYZ     22      56      24      41
20140523    10037   PQR     30      45      5       20

【问题讨论】:

  • 这个问题已经在所有的互联网上被问过了。您可以旋转这些数据,或者如果类型没有太大变化,您可以全部解决。无论哪种方式,请查看“将行转换为列”。
  • 虽然在这种情况下我有多个列.. 不只是 1 个值列
  • 转置这些数据也是一样的。
  • 查找动态交叉表或动态透视表。这已经被回答了成千上万次了。

标签: sql-server tsql


【解决方案1】:

使用条件聚合:

select date, 
       id, 
       name,
       sum(case info = 'b' then price end) as bprice,
       sum(case info = 'b' then qty end) as bqty,
       sum(case info = 's' then price end) as sprice,
       sum(case info = 's' then qty end) as sqty
from tablename
group by date, id, name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多