如何使用SQL以日历格式显示数据

时间:2013-11-01 20:11:50

标签: sql sql-server calendar format

下午好,我需要以日历等格式打印一些日常信息,所以我在一些论坛中搜索,包括这个,我得到了一些功能和方法来制作日历但是当我尝试添加子查询时,这会崩溃告诉me“无法对包含聚合或子查询的表达式执行聚合函数。”

这是我的代码

;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 :(得分:1)

我同意Roman(有点),但我认为这根本不是一个很好的练习......这不是SQL应该用于的。您应该编写有效的查询并在应用程序层中处理查询结果的显示。