【问题标题】:Pivot in SQL 2008 R2SQL 2008 R2 中的数据透视
【发布时间】:2014-02-18 22:34:49
【问题描述】:

我有这样的桌子;

Date PlacementNamecampaignID 展示次数 点击次数 TotalConversions 活动

01/01/2014 美国 100 5000 500 50 手机书
01/02/2014 英国 101 7000 250 30 手机书
01/01/2014 美国 100 9000 800 40 移动电视
01/02/2014 英国 101 6000 300 10 移动电视

我想从真实表中透视 15-20 Activity 的表,因为这只是示例表。

我希望我的表格如下所示;

日期 PlacementName CampaignID Impressions Clicks Mobile Book Mobile TV
01/01/2014 美国 100 5000 500 50 NULL
01/01/2014 英国 100 9000 800 空 40
01/02/2014 美国 101 7000 250 30 空
01/02/2014 英国 101 6000 300 NULL 10

这是我在决赛桌中想要的格式。我想为这个表写查询。

【问题讨论】:

  • 您使用的是什么 DBMS?你做了什么研究?您是否尝试过解决您的问题?
  • 查看sql计数和分组方式
  • @FreshPrinceOfSO :如果你不能给出答案,请不要降低我的分数。我对这个环境很陌生,如果不想帮助,请不要帮助先生,但不要降低我的声誉。
  • 欢迎来到 StackOverflow。为了让我们帮助您,我们需要一些最低限度的信息。一旦您提供此信息,我将很乐意撤销反对票。
  • @FreshPrinceOfSO:对于您的回答,先生,我已经尝试了一些策略来解决这个问题,但无法找到如何做到这一点,因为我是第一次这样做并且必须先完成时间。谢谢你的帮助。我正在使用 SQL 2008 R2

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


【解决方案1】:

获取结果的最简单方法是使用聚合函数和 CASE 表达式将数据行转换为列,但您也可以应用 PIVOT 函数。

select date,
  placementname,
  campaignid,
  impressions,
  clicks,
  sum(case when activity = 'Mobile Book' then TotalConversions else 0 end) MobileBook,
  sum(case when activity = 'Mobile TV' then TotalConversions else 0 end) MobileTV
from yourtable
group by date, placementname, campaignid, impressions, clicks;

SQL Fiddle with Demo

select date, placementname, 
  campaignid, impressions,
  clicks,
  [Mobile Book], [Mobile TV]
from
(
  select date, placementname,
    campaignid, impressions,
    clicks, activity, totalconversions
  from yourtable
) d
pivot
(
  sum(totalconversions)
  for activity in ([Mobile Book], [Mobile TV])
) p

SQL Fiddle with Demo

【讨论】:

  • 非常感谢先生,您的解决方案对我来说非常有效。非常感谢。但是,我已经尝试了第一个,因为我已经尝试了第二个,但结果出现了错误。再次感谢。
  • @ADBI:你熟悉接受答案吗?我认为您没有接受个人资料中的任何内容,但您似乎已经评论了几次说某些东西确实有效。要“接受”,请单击相应答案左侧的勾号图标,使其变为绿色。我认为它会给你一两点,更重要的是它感谢一个乐于助人的人。
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多