這應該有希望幫助,如果你想這樣做在MS SQL
DECLARE @DateTable TABLE
(
DateValue DATE NOT NULL
)
DECLARE @StartDate DATE
DECLARE @EndDate DATE
DECLARE @WorkingDate DATE
SET @StartDate = '01 MAY 2016'
SET @EndDate = '30 MAY 2016'
SET @WorkingDate = @StartDate
WHILE @WorkingDate <= @EndDate
BEGIN
INSERT INTO @DateTable
SELECT @WorkingDate
SET @WorkingDate = DATEADD(DAY,1,@WorkingDate)
END
SELECT * FROM @DateTable
DECLARE @tempData TABLE
(
workdate date
, Sam int
)
insert into @tempData
SELECT
'01 MAY 2016',
10
insert into @tempData
SELECT
'01 MAY 2016',
10
insert into @tempData
SELECT
'03 MAY 2016',
10
SELECT
dates.DateValue,
SUM(ISNULL(Sam,0)) ttlsam
FROM
@DateTable dates
left join
@tempData Sah
on
dates.DateValue = sah.workdate
WHERE
dates.DateValue BETWEEN '01 May 2016' AND ' 05 May 2016'
GROUP BY
dates.DateValue
數據這會產生這樣的:
DateValue ttlsam
2016-05-01 20
2016-05-02 0
2016-05-03 10
2016-05-04 0
2016-05-05 0
顯然不知道你實際的數據是我認爲有些事情和有限的數據集中到你最初發布什麼幕後的東西。
我所做的所有事情都是創建一個dates
表,這是你用來作爲你的摘要表的例子,例如你需要的日期。我已經爲五月的前30天生成了它。但是你可以擁有一年的時間,只需更改開始日期和結束日期的值即可。
然後我們只是遍歷日期並將它們添加到表中。
完成此操作後,您將運行相同的查詢,但是會連接到您創建的此臨時表。然後它將對這些值進行分組和總和。如果沒有值存在,那麼它將執行ISNULL檢查並將零置於其位置。
希望這會有所幫助。
SQL不擅長數據顯示層(報告等)中的」填補空白「想要填寫數據中的空白,否則你需要一個「日期」表或你可以加入到你的_actual_數據中的東西 –
你需要一個計數表,計數表是數據庫特定的,你使用哪一個 –
你可以嘗試使用外部應用功能。該函數將負責計算SUM並返回每個工作日的該值。 – JVM