表如下
同学 语文 数学 英语
A 1 1 0
B 0 1 0
C 1 1 11表示及格,0表示不及格
要查出某个同学哪门课及格了,语句怎么写?要求查出如下格式
A 语文,数学
B 数学
C 语文,数学,英语
同学 语文 数学 英语
A 1 1 0
B 0 1 0
C 1 1 11表示及格,0表示不及格
要查出某个同学哪门课及格了,语句怎么写?要求查出如下格式
A 语文,数学
B 数学
C 语文,数学,英语
解决方案 »
- oracle 同步到sqlserver2005
- 行集函数
- 在XP上安装SQLServer2000PE,为何总出错,请高手指点一二!
- 怎么把整型转换为带格式的字符串?在线给分。
- 表1中 有个字段 CoeeGroup ,表2中 有个字段 Value
- MSSQL 中分页的问题
- sql server 2000追加备份的情况下如何恢复
- 装完SQL Server 2005后能装SQL Server 2000么?
- 这该如何做
- 跨局域网SQL Server的访问
- 求救,我把数据库B给合到数据库A里,但是B的表关系没了,怎么办,B里的表有很多主键,外键,索引等,到了A数据库全都没了。这样不行啊,必须有个简单的办法
- sql 表类型 和直接用 select into 语句那个效率高
;with cte(同学,语文,数学,英语) as
(
select 'A',1,1,0
union all select 'B',0,1,0
union all select 'C',1,1,1
)
select 同学, 及格科目=STUFF(及格科目,1,1,'')
from
(
select 同学, 及格科目=(case when 语文=1 then N',语文' else '' end+
case when 数学=1 then N',数学' else '' end+
case when 英语=1 then N',英语' else '' end)
from cte
)t/*
同学 及格科目
A 语文,数学
B 数学
C 语文,数学,英语
*/
create table hx
(同学 varchar(5),语文 int,数学 int,英语 int)insert into hx
select 'A',1,1,0 union all
select 'B',0,1,0 union all
select 'C',1,1,1
declare @tsql varchar(6000)select @tsql=isnull(@tsql+',','')+'['+b.name+']'
from sys.tables a
inner join sys.columns b on a.object_id=b.object_id
where a.name='hx' and b.name<>'同学'select @tsql='with t as
(select 同学,sub
from hx a
unpivot(val for sub in('+@tsql+')) u
where val=1)
select a.同学,
stuff((select '',''+b.sub from t b
where b.同学=a.同学 for xml path('''')),1,1,'''') ''及格科目''
from t a group by a.同学'
exec(@tsql)/*
同学 及格科目
----- -----------------
A 语文,数学
B 数学
C 语文,数学,英语(3 row(s) affected)
*/
;with cte(同学,语文,数学,英语) as
(
select 'A',1,1,0
union all select 'B',0,1,0
union all select 'C',1,1,1
)select 同学, 及格科目=STUFF(及格科目,1,1,'')
from
(
select 同学,
replace(replace(cast(语文 as varchar),'1',',语文'),'0','') +
replace(replace(cast(数学 as varchar),'1',',数学'),'0','') +
replace(replace(cast(英语 as varchar),'1',',英语'),'0','') as 及格科目
from cte
)t
/*
同学 及格科目
A 语文,数学
B 数学
C 语文,数学,英语
*/
(
select 'A', 1, 1, 0 union all
select 'B', 0, 1, 0 union all
select 'C', 1, 1, 1
)
select
同学,
case when 语文 = 1 then '语文' else '' end as 语文,
case when 数学 = 1 then '数学' else '' end as 数学,
case when 英语 = 1 then '英语' else '' end as 英语
from tb