日期:2014-05-18  浏览次数:20678 次

用SQL语句生成报表内容,已实现但是比较繁琐,求简洁思路

具体要求是,查询某资料表的纪录总数,查询某项(26项)填写的数量和没有填写的数量,然后再根据类型查询某项填写的和没有填写的,最后生成一个表

本想通过2次游标的循环查询,但是最后在拼SQL语句时需要传出count()值,最终放弃,而且考虑到速度问题也比较慢,最后只能用在while循环里写了26次的select和update(临时表),最后再写一次select总数的,不知道有没有别的思路,感觉这样很麻烦,本人在线,说得不明白的地方欢迎提问,主要想请教一些思路,多谢了

------解决方案--------------------
create table test(col1 varchar(10),col2 varchar(10))
insert test select null, 'a '
union all select 'b ', 'c '

select total=col1+col2,col1,col2 from
(
select col1=sum(case when col1 is not null then 1 else 0 end),
col2=sum(case when col2 is not null then 1 else 0 end)
from test
)a

drop table test

total col1 col2
----------- ----------- -----------
3 1 2
------解决方案--------------------
顶楼上,建议楼主多看看帮助

CASE 搜索函数:
按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。


返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。


如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。

照你的写法, ' '非空,当然会返回1了,根本不会进行 <> ' '的判断,结果怎么可能对。