请教一个SQLSERVER中的SQL语句查询问题:如果将这些数据分组查询并显示出来。谢谢各位指点! ( 积分: 200 )

  • 主题发起人 主题发起人 nj_herry
  • 开始时间 开始时间
N

nj_herry

Unregistered / Unconfirmed
GUEST, unregistred user!
这是表结构和数据:
列A 列B
A DDD
A EEE
A FFF
B CCC
B GGG
B XXX
B AAA
C SSF
D DFD
D FFG
要实现如下的查询结果,请问用什么SQL语句查询,谢谢!
A DDD,EEE,FFF
B CCC,GGG,XXX,AAA
C SSF
D DFD,FFG
 
这是表结构和数据:
列A 列B
A DDD
A EEE
A FFF
B CCC
B GGG
B XXX
B AAA
C SSF
D DFD
D FFG
要实现如下的查询结果,请问用什么SQL语句查询,谢谢!
A DDD,EEE,FFF
B CCC,GGG,XXX,AAA
C SSF
D DFD,FFG
 
用存储过程吧,加上游标
 
SQL2000只能用游标实现,新出SQL2005可以用一句实现,下面这个是最简单的方法了:
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql +rtrim(列B) from (select distinct 列B from 表名
group by 列A) as a
select @sql
GO
 
-- 一句SQL语句好像不行吧,可以创建自定义函数来解决。
-- DBMS为SQL Server, 假设表名为TableName,字段ColumnA, ColumnB。 代码如下:
CREATE FUNCTION dbo.uf_Incorporate
(
@ColumnA CHAR(10)
)
RETURNS VARCHAR(100)
AS
begin

DECLARE @ColumnB VARCHAR(10)
DECLARE @Result VARCHAR(100)
SELECT @Result=''
DECLARE TempCursor CURSOR FOR
SELECT ColumnB FROM TableName WHERE ColumnA=@ColumnA
OPEN TempCursor
FETCH NEXT FROM TempCursor INTO @ColumnB
WHILE @@FETCH_STATUS=0
begin
SELECT @Result=@Result+RTRIM(@ColumnB)+','
FETCH NEXT FROM TempCursor INTO @ColumnB
END
CLOSE TempCursor
DEALLOCATE TempCursor
SELECT @Result=LEFT(@Result,LEN(@Result)-1) --去掉最后一个逗号
RETURN @Result
END
-- 然后再使用一句SQL语句就可以了
-- SELECT ColumnA, dbo.uf_Incorporate(ColumnA) Result FROM TableName Group By ColumnA
 
不好意思,刚才忘说了,原始表听列A和列B是一条综合查询语句形成的。是从几个表中提取出来的。语句好下:
select dpvversionname,dccofficename from DICOffice a,DICVersion c, VERNewVersion
d where a.dccid=d.vnv_dccid and d.vnv_dpvid=c.dpvid and a.dcc_prodid in (1,4,15)
通过这条SQL语句查出来的就是如下结构:
列A 列B
A DDD
A EEE
A FFF
B CCC
B GGG
B XXX
B AAA
C SSF
然后我想把实现那种分组显示该如何实现。谢谢!!
 
饭前饭后的应该可以的,我以前做过
 
没什么好办法,我觉得要实现你的要求,必须做循环.大家说的方法无非是把循环写成一句,只是个技巧的问题.没法在本质上解决这个问题
 
多人接受答案了。
 
后退
顶部