2013-11-01 87 views
0

下午好,我需要以日曆等格式打印一些日常信息,因此我在包括此日曆在內的一些論壇中進行了搜索,並獲得了製作日曆的一些功能和方法,但當我嘗試添加一個子查詢時,這個崩潰告訴我「不能在包含聚合或子查詢的表達式上執行聚合函數」。如何使用SQL以日曆格式顯示數據

這是我的代碼

;with monthDates 
as 
(
    select DATEADD(month, datediff(month, 0, '2013-09-01'),0) as d 
      ,DATEPART(week, DATEADD(month, datediff(month, 0, '2013-10-30'),0)) as w 
    union all 
    select DATEADD(day, 1, d) 
      ,DATEPART(week, DATEADD(day, 1, d)) 
    from monthDates 
    where d < DATEADD(month, datediff(month, 0, '2013-10-30')+1,-1) 
) 

select max(case when datepart(dw, d) = 1 then datepart(d,d) else null end) as [Sunday] 
     ,max(case when datepart(dw, d) = 2 then (SELECT Cost FROM Freights WHERE ixMov=16788) else null end) as [Monday] 
     ,max(case when datepart(dw, d) = 3 then datepart(d,d) else null end) as [Tuesday] 
     ,max(case when datepart(dw, d) = 4 then datepart(d,d) else null end) as [Wednesday] 
     ,max(case when datepart(dw, d) = 5 then datepart(d,d) else null end) as [Thursday] 
     ,max(case when datepart(dw, d) = 6 then datepart(d,d) else null end) as [Friday] 
     ,max(case when datepart(dw, d) = 7 then datepart(d,d) else null end) as [Saturday] 
from monthDates 
group by w 

在這種情況下,我只影響只是星期一,但它展示給我從MSSQL

的錯誤警告

我做它在一個錯誤的方式,也許我不需要使用一些代碼來描述我使用的示例,這些數據是用於使用DevExpress的XtraReports的報告,所以我想做一個查詢,以便以這種格式向我提供信息。

我需要的信息看起來這樣....

Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday| 
NULL |45 |203 |87  |231  |123 |321  | 
321 |54 |302 |78  |132  |321 |123  | 
154 |44 |283 |47  |131  |128 |NULL | 

廣場NULL在沒有數據。

謝謝

+1

我認爲這是一個很好的練習,但我不會推薦在實際應用中做到這一點 –

+0

爲什麼不推薦?我試圖在應用程序中將它用於我的工作 – kelelehead

回答

1

我與羅馬(種)同意,但我不認爲這是一個很好的鍛鍊在所有...這不是SQL應該使用。您應該編寫高效的查詢並處理查詢結果在應用程序層中的表示。

+0

我同意你的意見,我可以在應用程序層對錶格進行格式化,我認爲SQL語言可以將其作爲一種良好實踐 – kelelehead