2015-09-19 63 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