create table A(QID int,Level char(1))
goinsert into A values(1, 'A')
insert into A values(2, 'B')
insert into A values(3, 'C')
insert into A values(4, 'D')
gocreate table B(ID int, WriteDate datetime ,QID int)
go
insert into B values(1, '2006-1-10', 1)
insert into B values(2, '2006-1-3', 1)
insert into B values(3, '2006-1-5', 2)
insert into B values(4, '2006-1-15', 3)
godeclare @sql varchar(2000)
set @sql='select B.ID,B.WriteDate,'select @sql=@sql+'(case Level when '''+Level+''' then ''√'' else '''' end) as '+ Level+','
from A,B
where A.QID=B.QIDset @sql=stuff(@sql,len(@sql),1,'')
set @sql=@sql+' from A,B where A.QID=B.QID'exec(@sql)
goinsert into A values(1, 'A')
insert into A values(2, 'B')
insert into A values(3, 'C')
insert into A values(4, 'D')
gocreate table B(ID int, WriteDate datetime ,QID int)
go
insert into B values(1, '2006-1-10', 1)
insert into B values(2, '2006-1-3', 1)
insert into B values(3, '2006-1-5', 2)
insert into B values(4, '2006-1-15', 3)
godeclare @sql varchar(2000)
set @sql='select B.ID,B.WriteDate,'select @sql=@sql+'(case Level when '''+Level+''' then ''√'' else '''' end) as '+ Level+','
from A,B
where A.QID=B.QIDset @sql=stuff(@sql,len(@sql),1,'')
set @sql=@sql+' from A,B where A.QID=B.QID'exec(@sql)
解决方案 »
- 数据库与存储过程
- 昨夜看到谁谁的数字转英文帖子, 咋不见了?!
- 日志一天时间就提示已满! 是用户无法登陆系统
- [求助] 某个字段的检索值是不定的,sql语句怎么写?
- 如何删除sql server 2k中数据库日志
- 请问 为什么 这个 分页的 贮存过程 在 adodataset 中不能 显示数据 ??????????????????
- 请教邹建大哥!在没有安装SQL的电脑上要运行查询分析器行不行,要怎么配置,是不是只要几个DLL文件就可以??谢谢
- 请教多表查询语句
- 怎样通过Sql语句选择出我自己创建的角色名,而不包括sql server自己生成的那一堆角色?
- drop表和索引报错,提示连接中断,版主大大救命
- 如何创建SQL Server服务器?
- 多表同时跟一张表主键关联的问题
case Level when '''+Level+''' then ''√'' else '''' end) as '+ Level+',请教哪里找点这样的资料看看 谢谢
select B.ID,B.WriteDate,
A=case B.QID when 1 then '√' else '' end,
B=case B.QID when 2 then '√' else '' end,
C=case B.QID when 3 then '√' else '' end,
D=case B.QID when 4 then '√' else '' end
.......
from A,B
where A.QID=B.QID
计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
CASE 搜索函数计算一组布尔表达式以确定结果。
两种格式都支持可选的 ELSE 参数
你的方法不错,但还有个问题能解释一下吗?
你用动态生成SQL语句的方法,在上面的数据中得出下面的SQL:
select B.ID,B.WriteDate,(case Level when 'A' then '√' else '' end) as A,(case Level when 'A' then '√' else '' end) as A,(case Level when 'B' then '√' else '' end) as B,(case Level when 'C' then '√' else '' end) as C from A,B where A.QID=B.QID才四条记录就生成了这么长的语句,我的数据表中有1000条,在我的环境中测试的时候出现了以下的问题:
select B.ID,B.WriteDate,(case Level when 'A' then '√' else '' end) as A,(case Level when 'A' then '√' else '' end) as A,(case Level when 'B' then '√' else '' end) as B,(case Level when 'C' then '√' else '' end) as C,(c因为太长,SQL语句被自动截断了,数据库提示:第 1 行: 'c' 附近有语法错误。
请问你是如果解决这样的问题的?
注:我已经将declare @sql varchar(2000) 改成 declare @sql varchar(8000)