显示空行

时间:2016-05-12 15:28:22

标签: sql

SELECT 
    workdate, 
    SUM(Sam) ttlsam 
FROM 
    Sah 
WHERE 
    workdate BETWEEN '01 May 2016' AND ' 05 May 2016' 
GROUP BY 
    workdate

我执行了上面的命令,结果是

Workdate ttlsam
02 may   10
03 may   20
04 may   40

这里没有显示01年5月5日,因为这两个日期没有数据。但我想要这样。我的意思是虽然01和05可能没有数据,但他们需要在ttlsam字段中显示0或null值

01 may   0
02 may   10
03 may   20
04 may   40
05 may   0

3 个答案:

答案 0 :(得分:1)

如果您想在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表格,您可以将其用作汇总表格,例如:你需要的日期。我已经在5月的前30天生成了它。但你可以拥有它一年等,只需更改开始和结束日期的值。

然后我们只是遍历日期并将它们添加到表中。

完成此操作后,您将运行相同的查询,但加入到您创建的临时表中。然后它将对值进行分组和求和。如果没有值存在,那么它将进行ISNULL检查并将零置于其中。

希望这会有所帮助。

答案 1 :(得分:0)

要获得没有漏洞的时间序列,例如,适用于绘制 ttlsam workdate 的图形,您需要明确构建所有感兴趣的日期。 An example for Oracle

然后,您可以为每个感兴趣的日期选择 Sam 列的总和,而不是原始表中的每个日期。 假设您已使用 d 列填充 dates_of_interest 表:

select d, sum(Sam) from dates_of_interest left outer join Sah on d=workdate group by d

答案 2 :(得分:0)

选择     dates.DateValue,     SUM(ISNULL(Sam,0))ttlsam 从     @DateTable日期     离开加入         @tempData Sah         上         dates.DateValue = sah.workdate 哪里     date.DateValue BETWEEN '01 May 2016'和'2016年5月5日' 通过...分组     dates.DateValue。我想从SAH表中添加另一个条件,例如“像'K%'这样的行'我应该怎么做。