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

求SQL 语句 怎么搞这个例子
我就不上图了 。。

如题:
SQL 表本意是这样的
id name type fshu
1 张三 语文 90
2 张三 数学 80
3 张三 英语 86
3 李四 数学 78
3 李四 英语 89
3 李四 英语 98
3 王五 语文 90
3 王五 数学 87
3 王五 英语 80

现在要改成:

1 张三 语文 90 数学 80 英语 86
2 李四 语文 78 数学 89 英语 98
3 王五 语文 90 数学 87 英语 80

本人初学者。。让前辈们见笑了 。 谢谢各位了~

------解决方案--------------------
SQL code

IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'tba')
BEGIN
    DROP TABLE tba
END
GO
CREATE TABLE tba
(
    id INT,
    name VARCHAR(100),
    type VARCHAR(100),
    fshu INT
)
GO
INSERT INTO tba
SELECT 1, '张三', '语文', 90 UNION
SELECT 2, '张三', '数学', 80 UNION
SELECT 3, '张三', '英语' ,86 UNION
SELECT 3, '李四', '数学' ,78 UNION
SELECT 3, '李四', '英语', 89 UNION
SELECT 3, '李四', '语文', 98 UNION
SELECT 3, '王五', '语文', 90 UNION
SELECT 3, '王五', '数学', 87 UNION
SELECT 3, '王五', '英语', 80
GO

declare @sql varchar(max)
select @sql=isnull(@sql+',','')
  +'max(case when rn='+ltrim(rn)+' then type end) as [科目],'
  +'max(case when rn='+ltrim(rn)+' then fshu end) as [分数]'
from
(select distinct rn=row_number() over(partition by name order by type) from tba) t

exec ('select name,'
  +@sql
  +' from (select *,rn=row_number() over(partition by name order by type) from tba) t group by name'
  )

name    科目    分数    科目    分数    科目    分数
李四    数学    78    英语    89    语文    98
王五    数学    87    英语    80    语文    90
张三    数学    80    英语    86    语文    90

------解决方案--------------------
SQL code
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[name] varchar(4),[type] varchar(4),[fshu] int)
insert [tb]
select 1,'张三','语文',90 union all
select 1,'张三','数学',80 union all
select 1,'张三','英语',86 union all
select 2,'李四','语文',78 union all
select 2,'李四','数学',89 union all
select 2,'李四','英语',98 union all
select 3,'王五','语文',90 union all
select 3,'王五','数学',87 union all
select 3,'王五','英语',80
go

select a.id,a.name,a.type,a.fshu,b.type,b.fshu,c.type,c.fshu
from tb a
join tb b on a.id=b.id and b.type='数学'
join tb c on a.id=c.id and c.type='英语'
where a.type='语文'

/**
id          name type fshu        type fshu        type fshu
----------- ---- ---- ----------- ---- ----------- ---- -----------
1           张三   语文   90          数学   80          英语   86
2           李四   语文   78          数学   89          英语   98
3           王五   语文   90          数学   87          英语   80

(3 行受影响)
**/