日期:2014-05-19  浏览次数:20475 次

求助,问一句简单的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那么就减一年,再加上月份
上一句不用减一年(未列出) 其实和表变量的效率是一样的,你自取吧