打雷了,下雨了,刮风收衣服拉
各位大虾你们好:
一个很简单的动态sql问题,求求各位帮帮我,分数不多,一点心意
--创建测试环境
Create table T (Class varchar(2),CallDate datetime, CallCount int)
insert into T select '1 ', '2005-8-8 ',40
union all select '1 ', '2005-8-7 ',6
union all select '2 ', '2005-8-8 ',77
union all select '3 ', '2005-8-9 ',33
union all select '3 ', '2005-8-8 ',9
union all select '3 ', '2005-8-7 ',21
--动态SQL
declare @s varchar(8000)
set @s= 'select CallDate '
select @s=@s+ ',[CallCount '+Class+ ']=sum(case when Class= ' ' '+Class+ ' ' ' then CallCount else 0 end) '
from T
group by Class
set @s=@s+ ' from T group by CallDate order by CallDate desc '
exec(@s)
我看不懂的是:select @s=@s+ ',[CallCount '+Class+ ']=sum(case when Class= ' ' '+Class+ ' ' ' then CallCount else 0 end) '这一句。
即使结合执行结果,还是一头雾水,能不能告诉我这句话的意思啊?
最好能够翻译一下,呵呵。
------解决方案--------------------select @s=@s+ ',[CallCount '+Class+ ']=sum(case when Class= ' ' '+Class+ ' ' ' then CallCount else 0 end) '
from T group by Class
-----------------------这才是完整的语句
select Class from T group by Class 先抽取基本语句,这你能看懂吧
查询出的class和前后的字符串赋给变量@s,因为有多条语句,所以每条语句都会来一次赋值,
若没有 @s+ 只会把最后的class赋给变量
但有了这个,就会每次把变量累加起来,第一个class处会得到显示名称的后缀1,2,3之类
第二个class值放到了case when的条件值中
set @s 、select @s 、set @s 构成了一个完整的查询语句,你还可以print出来看个明白
------解决方案--------------------多条语句,所以每条语句--多行记录,每行记录
抽取基本语句也很简单,在查询分析器中颜色不一样
------解决方案----------------------动态SQL
declare @s varchar(8000)
set @s= 'select CallDate '
select @s=@s+ ',[CallCount '+Class+ ']=sum(case when Class= ' ' '+Class+ ' ' ' then CallCount else 0 end) '
from T
group by Class
print @s
set @s=@s+ ' from T group by CallDate order by CallDate desc '
exec(@s)
在后面加多一个print @s 这样对你的理解会多点,上面以说出了,
如果还不明,先理解
select @s=@s+Class+ '我是字符 ' from T group by Class 这句
------解决方案--------------------如楼上的,加个PRINT 就可以理解之所以了。