【问题标题】:Flipping data in SQL Server在 SQL Server 中翻转数据
【发布时间】:2015-05-08 20:55:00
【问题描述】:

我有table a

Name  District Source  Revenue
Dave   34       A       120
John   36       B       140
Juyt   38       C       170 

还有table b

Name District Product Cost
Dave  34       A        50
John  36       B        40

我想要这样的视图。下面是所需的视图。

Name  District Source  Revenue  A    B   Total Cost 
Dave   34       A       120     50   0     50
John   36       B       140     0    40    40 
Juyt   38       C       170     0    0     0

表 b 中每次查找的产品数量不固定。当您的产品 A、产品 B 等产品的数量不固定时,有没有办法取消透视。我不想做动态 SQL 和动态 unpivot。是否有任何其他选项可以获得所需的视图?

【问题讨论】:

  • 您问:“是否有任何其他选项可以获得所需的视图?”不可以。当数据透视表中的列数不确定时,动态 SQL 是唯一的选择。
  • 您基本上是在询问是否有一种方法可以在不单独命名列的情况下执行数据透视,也不使用动态 SQL 这样做。 我同意你的愿望,真的希望有更好的选择,但不幸的是,之前有人问过这个问题并在这里回答:stackoverflow.com/questions/2170058/…
  • "有没有办法在不使用动态 SQL 的情况下取消透视一组动态类别?" 是的。但不是 T-SQL。 Excel(和其他工具)可以很好地做到这一点。如果你想在 SQL Server 上做,那么正如其他人所说,你需要动态 SQL。
  • 是的,OLAP 数据库(如 SQL Server Analysis Services)专门使用不同的方法进行分组和透视。如果您要做很​​多此类事情,它们是很好的,但对于一次性查询来说就太过分了。
  • 为什么要在使用左连接和派生表@Ssis Magician 2014 实现这一目标时进行反透视

标签: sql sql-server


【解决方案1】:

根据您的示例数据,我已为您提供了输出

declare @t table (name varchar(10),District int,Source varchar(2),Revenue int)
insert into @t (name,District,Source,Revenue)values ('dave',34,'A',120),
('john',36,'B',140),('juyt',38,'C',170)

declare @tt table (name varchar(10),District int,product varchar(2),cost int)
insert into @tt (name,District,product,cost)values ('dave',34,'A',50),
('john',36,'B',40)


select A.name,A.District,A.Source,A.Revenue,A.A,A.B,
SUM(A + B) TotalCost from  (
select t.name,
t.District,
t.Source,
t.Revenue,
CASE WHEN tt.product = 'A' THEN cost ELSE 0 END A ,
CASE WHEN tt.product = 'B' THEN cost ELSE 0 END B 
 from @t t
 left join @tt tt on 
 t.name = tt.name 
 AND 
 t.District = tt.District )A
 GROUP BY A.name,A.District,A.Source,A.Revenue,A.A,A.B

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多