【发布时间】:2016-01-30 21:55:20
【问题描述】:
这是我的查询:
SELECT STAFF.stf_first_name + '' + STAFF.stf_last_name As Name,
DATENAME(month,RES_HAB_DATA.reshabdata_data_date) As Month,
SUM(case when RES_HAB_DATA.reshabdata_duration > 0
then (RES_HAB_DATA.reshabdata_duration/15) else 0 end) As ServiceDeliveryTime,
MONTH(RES_HAB_DATA.reshabdata_data_date) As MonthNumber
FROM RES_HAB_DATA
JOIN RES_HAB ON RES_HAB_DATA.reshab_id = RES_HAB.reshab_id
JOIN STAFF ON RES_HAB_DATA.staff_id = STAFF.stf_id
WHERE RES_HAB.serv_id = 30
AND RES_HAB_DATA.reshabdata_data_date >= '1/1/2015'
GROUP BY STAFF.stf_last_name,
STAFF.stf_first_name,
DATENAME(month,RES_HAB_DATA.reshabdata_data_date),
MONTH(RES_HAB_DATA.reshabdata_data_date)
ORDER BY MonthNumber
产生的结果集为:
Name Month ServiceDeliveryTime MonthNumber
----------------------------------------------------------------------------
mb January 52 1
MikeCasey January 10 1
MikeCasey February 4 2
PrecisionCareSupport February 0 2
MikeCasey March 4 3
PrecisionCareSupport March 0 3
MikeCasey April 8 4
PrecisionCareSupport April 0 4
MikeCasey May 16 5
MikeCasey July 4 7
PrecisionCareSupport July 1 7
PrecisionCareSupport August 0 8
MikeCasey September 10 9
MikeCasey October 12 10
我正在生成一个图表并希望为该图表生成系列,但该系列的形成方式应该是每个系列标签必须具有所有刻度值(如果缺少相应的月份,则为零)。简单来说,我希望结果集为:
Name Month ServiceDeliveryTime MonthNumber
----------------------------------------------------------------------------
mb January 52 1
mb February 0 2
mb March 0 3
mb April 0 4
- - 0 5
直到 12 月,客户 MikeCasey 的系列将持续到 12 月,依此类推...对于所有系列标签。如果该客户缺少任何刻度,则该月的值将为零。
我怎样才能产生这个结果集?我想要一些统一的解决方案,因为对于不同的图表可能会有很多这样的查询。
【问题讨论】:
-
使用的 Pleasa 标记 dbms 产品。 (那里有一些非 ANSI SQL...)
-
你有一个月的帮助表吗?
标签: sql sql-server database common-table-expression