一个数据库的笔试题,求解

已经一个表的结构如下:COL1   COL2 a      aaa b &... 已经一个表的结构如下:

COL1   COL2
 a      aaa
 b      bbb
 a      aa2
 a      aa3
 b      bb2

求SQL语句,其运行后的输出结果如下:

a aaa,aa2,aa3
b bbb,bb2

期待高手解答下,谢谢:)
展开
 我来答
哉瑛宠171
2008-11-26 · TA获得超过770个赞
知道小有建树答主
回答量:288
采纳率:0%
帮助的人:315万
展开全部
如果是普通问题
select 一下就出来了
例如:SELECT COL2 FROM 表名 WHERE COL1='a';

如果是 行转列 的问题:
给你一个列子:
表一
学生编号 学生姓名 科别 分数
1083 张三 语文 75
1083 张三 数学 84
1083 张三 英语 92
1084 李四 语文 84
1084 李四 数学 93
1084 李四 英语 87
怎么得出如下的表
学生编号 学生姓名 语文 数学 英语
1083 张三 75 84 92
1084 李四 84 93 87

Select 学生编号,学生姓名,sum(case when 科别=’语文’ then 分数 else 0 end) as 语文,sum(case when 科别=’数学’ then 分数 else 0 end) as 数学,sum(case when 科别=’英语’ then 分数 else 0 end) as 英语 from A group by 学生编号,学生姓名

再给你一个分析网址 一点一点 帮你分析
http://blog.sina.com.cn/s/blog_4cca663f0100abfv.html

铁定能用 希望可以帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d8cd15553
2008-11-25 · TA获得超过149个赞
知道答主
回答量:56
采纳率:100%
帮助的人:71.6万
展开全部
如果这张表是写死了,倒可以写一条sql语句.如下是sqlsever语句
select COL1,
isnull(max(case when COL2='aaa' then COL2+',' end),'') +
isnull(max(case when COL2='aa2' then COL2+',' end),'') +
isnull(max(case when COL2='aa3' then COL2+',' end),'') +
isnull(max(case when COL2='bbb' then COL2+',' end),'') +
isnull(max(case when COL2='bb2' then COL2 end),'') as 'COL2'
from MyTable group by COL1
如果可能扩展,那就得用pl/sql了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
charlif
2008-11-26 · TA获得超过231个赞
知道小有建树答主
回答量:381
采纳率:0%
帮助的人:0
展开全部
--帮你把语句写出来了,SQL SERVER
--全部执行可看到结果
--准备数据============================================================
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TempTable]') AND type in (N'U'))
DROP TABLE [dbo].[TempTable]
go
declare @T1 table(col1 varchar(10),col2 varchar(10))
insert into @T1
select 'a','aaa'
union all
select 'b','bbb'
union all
select 'a','aa2'
union all
select 'a','aa3'
union all
select 'b','bb2'
declare @T2 table(col1 varchar(10),col2 varchar(50))
select identity(int,1,1) as sortid,col1 into temptable from @T1 group by col1
--============================================================
--处理过程====================================================
declare @minid int
declare @maxid int
select @maxid = max(sortid),@minid = min(sortid) from temptable
declare @strSql varchar(4000)
declare @resSql varchar(4000)
set @strSql = ''
while @minid <= @maxid
begin
select @strSql = @strSql + col2 +',' from @T1 Where col1 = (select col1 from temptable where sortid = @minid)
Set @resSql = @strSql
Set @strSql = ''
select @resSql = substring(@resSql,1,len(@resSql)-1)
insert into @T2
select col1,@resSql from temptable where sortid = @minid
set @minid = @minid + 1
end
select * from @T2
--====================================================
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6e0e5dd93
2008-11-25 · TA获得超过1262个赞
知道小有建树答主
回答量:222
采纳率:0%
帮助的人:123万
展开全部
给你个例子参考,有三种方法:

--如何实现行列列合并
if not object_id('testdb..tb')is null
drop table tb
create table tb(id int, [value] varchar(10))
insert tb
select 1,'aa' union all
select 1,'bb' union all
select 2,'aaa' union all
select 2,'bbb' union all
select 2,'ccc'
go
select * from tb

--1、函数实现分组和并列
if object_id(N'dbo.f_str',N'FN') is not null
drop function dbo.f_str
go
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(1000)
AS
BEGIN
DECLARE @r varchar(1000)
SELECT @r = isnull(@r+',','')+[value] FROM tb WHERE id=@id
RETURN @r
END
GO
-- 调用函数
SELECt id, [values] = dbo.f_str(id) FROM tb GROUP BY id
drop function dbo.f_str

-- 2、用apply和for XML查询处理
select * from (select distinct id from tb) t
outer apply
(
select [values]=stuff((select ','+[value] from tb where id=t.id for xml path('')), 1, 1, '')
)n

--3、使用group by 和 for xml
select id, [values]=stuff((select ','+[value] from tb where id=t.id for xml path('')), 1, 1, '')
from tb t
group by id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mailking2001
2008-11-25 · TA获得超过817个赞
知道小有建树答主
回答量:1037
采纳率:100%
帮助的人:776万
展开全部
create function getresult(@c varchar(100))
returns varchar(4000)
as
begin
declare @r varchar(4000)
set @result=''
select @r= isnull(@r+',','')+ COL2 from 表名 where COL1=@c
return @r
end

select COL1,dbo.getresult(COL1) from 表名 group by COL1

这是通过函数的方法来完成的。
先建了getresult(@c varchar(100)) 函数
然后通过
select COL1,dbo.getresult(COL1) from 表名 group by COL1
调用函数,字符串的合并是通过函数来完成的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式