求助,问一句简单的aql语句!
id num date
2 2051470 2007-4
4 20 2007-3
5 6595 2007-2
7 95 2006-12
9 632970 2006-11
12 60300 2006-09
14 8005 2006-08
data字段的数据类型是 varchar
我想从这个表里取出num 和date字段使得出来的结果是
0 2007-6
0 2007-5
2051470 2007-4
20 2007-3
6595 2007-2
0 2007-1
95 2006-12
632970 2006-11
0 2006-10
60300 2006-09
8005 2006-08
原表中缺了的日期的记录,对应的sum字段用0补上
只显示当前月往前推1年的数据
该如何写啊??
------解决方案--------------------select num=isnull(num,0),date=case when date is null and b.mon <=month(getdate())
then datename(year,getdate())+ '- '+cast(b.mon as varchar)
when date is null and b.mon> month(getdate()) then datename(year,dateadd(year,-1,getdate()))+ '- '+
cast(b.mon as varchar) else date end
from test a full outer join
(
select 1 as mon
union all
select 2
union all
select 3
union all
select 4
union all
select 5
union all
select 6
union all
select 7
union all
select 8
union all
select 9
union all
select 10
union all
select 11
union all
select 12
)b
on right(a.date,len(a.date)-charindex( '- ',a.date))=b.mon
where b.mon <> month(getdate())+1
/*
num date
----------- -------
0 2007-1
6595 2007-2
20 2007-3
2051470 2007-4
0 2007-5
0 2007-6
8005 2006-08
60300 2006-09
0 2006-10
632970 2006-11
95 2006-12
(所影响的行数为 11 行)
*/
------解决方案--------------------把on right(a.date,len(a.date)-charindex( '- ',a.date))=b.mon 改为
on month(a.date+ '-1 ')=b.mon 你就容易理解了,他的思路很好
when date is null and b.mon> month(getdate())
then datename(year,dateadd(year,-1,getdate()))+ '- '+ cast(b.mon as varchar)
他把12个月都列出,这句是,如果里面的数大于当前月,如7,8,9那么就减一年,再加上月份
上一句不用减一年(未列出) 其实和表变量的效率是一样的,你自取吧