2015-09-19 82 views
0

我试图提取一周中每一天发生特定事件的次数。这是我尝试过的:SQL - GROUP BY不与DateName一起使用

SELECT Source , Event, Qty, DateName(WEEKDAY,(TranDate)) As DayOfWk 
FROM OurDB 
GROUP BY Source, Event, DateName(WEEKDAY,(TranDate)), Qty 

但它不是按Source分组(它只有两个可能的值)。如果我拿出DateName函数,那么所有事情都可以正确分组。基本上我希望得到:

  • 源1
    • 事件1
      • 日 - 15
      • 日 - 12
    • 事件2
      • 星期一 - 11
      • 日 - 6
  • 源2
    • 事件1
      • 周一...等

编辑:添加的行数据

OurDB:

  • 源,事件,TRANDATE,数量
  • 电话,优惠券1,15年7月2日,6
  • Internet,Coupon 4,8/2/15,2
  • 因特网,优惠券1,15年6月1日,5
  • 因特网,优惠券1,15年6月8日,4
  • 电话,优惠券2,15年8月2日,4
  • 电话,优惠券1 ,15年7月3日,10
  • 因特网,优惠券1,15年6月5日,3

所需的输出:

  • 因特网,优惠券1,星期一,9
  • 上网。吨,优惠券1,星期五,3
  • 因特网,优惠券4,星期日,2
  • 电话,优惠券1,周四,6
  • 电话,优惠券1,周五,10
  • 电话,优惠券2,周日,4
+0

请显示一些行数据 – Balinti

+0

将行数据添加到原始帖子。 – MSCF

回答

1
SELECT Source , Event, max(Qty) --or min of qty 
,DateName(WEEKDAY,(TranDate)) As DayOfWk 
FROM OurDB 
GROUP BY Source, Event, DateName(WEEKDAY,(TranDate)) 

您的查询因此未拥有aggregate功能。从预期的结果看来,您必须在数量列上使用aggregate函数。

+0

我试过使用(与SUM除外),我仍然得到混合结果。所有来源都混在一起。我的尝试: '选择源,事件,SUM(数量)作为数量,DATENAME(星期,(TRANDATE))作为DayOfWk FROM Q_COUPONUSAGE GROUP BY源,事件,DATENAME(星期,(TRANDATE))' – MSCF

+0

你必须处理特定的星期以及结果将被混淆。 –

+0

我想我很困惑。随着Source在GROUP BY中的排名第一,我的印象是,即使结果混合在一起,Source字段仍然会被分组在一起。关于按周分组,是否不会导致多个星期六(或任何一天)的条目?每周有一个记录? – MSCF