按日历日期排序的SQL数据

时间:2013-02-12 22:32:16

标签: sql sql-server sql-server-2008

每日仅针对日历日排序的SQL数据。2013年2月1日是星期五,需要提取2月1日的数据。 2.现在,它将整个1-27-2013周的数据拉到2-2-2013。我的结果列在周结束日期的总计费中。 EX(1-5-13,1-12-13)对于1月底和2月初,我需要结果看起来像1-27-13到1-31-13 ="总计&#34 ;截止日期为第31天。 2月2日至13日至2月2日至13日="总计"

我已经能够在个人日子里做到这一点,但那不是"会计"想要它。

提前致谢。 这是我的代码:

SELECT
    DATEADD(week, DATEdiff(WK, 0, bd.[Service Date 1]) ,5) AS month, 
    bd.Chart, 
    bd.[Transaction Code], 
    SUM(bd.Units) AS [Total Billed]

FROM dbo.[Billing Detail] AS bd 

INNER JOIN dbo.Patient AS p ON bd.Chart = p.[Chart Number]
WHERE

    (bd.[Transaction Code] = 'H2016') 
    AND (bd.[Service Date 1] >= '01/01/2013') 
    AND (bd.[Service Date 1] < '12/31/2013')

GROUP BY 
    DATEADD(week, DATEdiff(WK, 0, bd.[Service Date 1]) ,5), 
    bd.Chart, 
    bd.[Transaction Code]

ORDER BY bd.Chart

2 个答案:

答案 0 :(得分:3)

只需添加到您的选择列表(并按列表分组)两个字段:

...
MONTH([Service Date 1]),
DATEPART(week,[Service Date 1])
...

那应该这样做

答案 1 :(得分:1)

我会编写一个存储过程,它将日期变量作为输入参数。它会这样开始:

declare @dateIn as date;
declare @EndOfWeek as date;
declare @StartOfWeek as date;
declare @WeekEndsOn as int;

set @WeekEndsOn = 6;  -- Friday
if datepart(dw, @dateIn) <= @WeekEndsOn
set @EndOfWeek = dateadd(day, @WeekEndsOn - datepart(dw, @dateIn), @dateIn);
else
set @EndOfWeek = dateadd(day, (7 + @WeekEndsOn) - datepart(dw, @dateIn), @dateIn)

然后使用@StartOfWeek和@EndOfWeek变量运行查询。你可以使用convert()和concatonation的组合来获得这样的字符串,“2-1-13到2-2-13”。

事实上,您可能希望将@WeekEndsOn作为输入参数,以防它发生变化。