如何在句点中显示数据,否则为NULL

时间:2015-12-30 09:57:15

标签: sql sql-server tsql

我希望显示这样的数据,如果索赔表在2015年出现,那么它应该基于该日期的值。 否则它应该是Null

我的日期增量代码:

Declare @t table (dt date)
declare @dt datetime, @dtEnd datetime
set @dt = '2015-01-01'
set @dtEnd = dateadd(mm, 1, @dt)
INSERT @t(dt)
select dateadd(mm, number, @dt)
from 
    (select distinct number from master.dbo.spt_values
     where name is null and number < 12
    ) n
where dateadd(day, number, @dt) < @dtEnd

select dt from @t

Declare @Claim table(val varchar(10),dt date,qty int)
insert into @Claim(val,dt,qty)values
 ('plumbing','2015-01-01 00:00:00.000',32),
('Antique','2014-09-04 00:00:00.000',32),
('show','2013-10-01 00:00:00.000',32),
('valet','2015-09-01 00:00:00.000',32)

必需输出:

   dt       qty     val
2015-01-01   32   plumbing
2015-02-01  NULL
2015-03-01  NULL
2015-04-01  NULL
2015-05-01  NULL
2015-06-01  NULL
2015-07-01  NULL
2015-08-01  NULL
2015-09-01  32    valet
2015-10-01  NULL
2015-11-01  NULL
2015-12-01  NULL

日期应该在2015年,那么价值应该是否则在2014年或2013年的日期为空?

4 个答案:

答案 0 :(得分:0)

请检查下面,我现在没有sql-server验证。但这会给你一个想法。

select CAST(dt as DATE) as dt
    , SUM(CASE WHEN EXTRACT(YEAR FROM dt) = 2015 THEN qty ELSE NULL END) AS qty
    , (CASE WHEN EXTRACT(YEAR FROM dt) = 2015 THEN val ELSE NULL END) AS val
FROM Claim GROUP BY dt, val;

答案 1 :(得分:0)

您还可以将年份函数与案例陈述一起使用..

select dt, qty, val, (case when year(dt)='2015' then val else null end) newval  from @claim

答案 2 :(得分:0)

试试这个,

if (RadioBTN.IsChecked == true) {
    RadioBTN.IsChecked = false;
}

select t.dt,qty,val from @t t 
left join @Claim t1 
on 
cast(t.dt as varchar(7))=cast(t1.dt as varchar(7))

答案 3 :(得分:0)

最简单的解决方案:

{{1}}

dt是您的日期列