3

SQL 数据仅按日历天排序。例如 2013 年 2 月 1 日是星期五,需要提取 2 月 1 日和 2 日的数据。现在它会将 2013 年 1 月 27 日整周的数据提取到2013 年 2 月 2 日。我的结果包含在周末结束日期的总账单中。EX( 1-5-13, 1-12-13) 对于 1 月底和 2 月初,我需要结果看起来像 1-27-13 到 1-31-13 = "total" 与一周结束日期为 31 日。对于 2 月 2-1-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
4

2 回答 2

3

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

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

那应该这样做

于 2013-02-12T22:46:02.677 回答
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 to 2-2-13”。

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

于 2013-02-12T22:57:35.770 回答