【问题标题】:PIVOT operation枢轴操作
【发布时间】:2014-09-03 13:16:57
【问题描述】:
name      roll                  vote  total vote        status

aaa     Administrator             1    2            Feedback Received
aaa     HR Support Staff          1    2            Feedback Received
dev     Administrator             1    2            Shortlisted
dev     HR Support Staff          1    2            Shortlisted
raj     Administrator             1    1            Feedback Received
rajesh  HR Support Staff          2    2            Shortlisted

需要显示喜欢

Name     HR Support Staff       Administrator    Total Vote       Status

aaa            1                    1               2           Feedback Recived  

这个方法怎么显示?

【问题讨论】:

  • 你是如何输出数据的?在 UI 和/或报告层中进行透视比在 SQL 中容易得多。大多数网格和报告工具都支持声明式动态透视,而 SQL 需要静态透视(或难以开发和调试的动态 SQL)

标签: sql sql-server sql-server-2008 tsql pivot


【解决方案1】:

这将是一个PIVOT 方法:

select [name], [Administrator], [HR Support Staff], [total vote], [status]
from Table1
pivot (
  min([vote])
  for [roll] in ([Administrator], [HR Support Staff])
) p

Working SqlFiddle

【讨论】:

  • 对 OP 的一些想法:这张桌子有限制吗?如果不是,Min func 可以替换为 AVG 和 Vote 列以键入 DECIMAL。另外,roll 应该是角色吗?
【解决方案2】:

这里的细节很少。你可以使用 PIVOT 或者你可以做一个交叉表。如果这些值是静态的,这是您可以使用交叉表执行此操作的一种方法。

select name
    , SUM(case when roll = 'HR Support Staff' then 1 end) as HRSupportStaff
    , SUM(case when roll = 'Administrator' then 1 end) as Administrator
    , MAX(TotalVote) as TotalVote
    , Status
from YourTable
group by name, Status

【讨论】:

  • 值将是动态的
  • 好的。所以你需要做一个动态的透视表或交叉表。如果你看看谷歌,你会发现很多方法来做动态数据透视表和动态交叉表。
  • 由于您没有提供任何可以使用我的代码的东西,这只是一个猜测。我无法测试它。我把那部分留给你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多