請看下面:
公司ID 部門ID
1003 m001 y001 c001 d001 gdg 154.00 zwei1 2009-07-31 11:04:42 hfh 2009-07-31
1003 m001 y001 c001 d001 GCG 15.00 zwei2 2009-07-31 11:19:46 HFH 2009-07-31
1003 m001 y001 c001 d001 jhbjb 42.00 zwei3 2009-07-31 11:20:54 fxcf 2009-07-31
1003 m001 y001 c001 d002 jhbjb 42.00 zwei3 2009-07-31 11:20:54 fxcf 2009-07-31
請問下如何根據公司ID和部門ID,如何讓它們有相同的數據,就隻顯示一行,如下面要顯示的結果:
公司ID 部門ID
c001 d001
c001 d002
公司ID 部門ID
1003 m001 y001 c001 d001 gdg 154.00 zwei1 2009-07-31 11:04:42 hfh 2009-07-31
1003 m001 y001 c001 d001 GCG 15.00 zwei2 2009-07-31 11:19:46 HFH 2009-07-31
1003 m001 y001 c001 d001 jhbjb 42.00 zwei3 2009-07-31 11:20:54 fxcf 2009-07-31
1003 m001 y001 c001 d002 jhbjb 42.00 zwei3 2009-07-31 11:20:54 fxcf 2009-07-31
請問下如何根據公司ID和部門ID,如何讓它們有相同的數據,就隻顯示一行,如下面要顯示的結果:
公司ID 部門ID
c001 d001
c001 d002
--这样?
select distinct 公司ID,部門ID from 表
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id value
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
*/
--1、sql2000中只能用自定义的函数解决
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
gocreate function dbo.f_str(@id int) returns varchar(100)
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go--调用函数
select id , value = dbo.f_str(id) from tb group by iddrop function dbo.f_str
drop table tb
--2、sql2005中的方法
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
goselect id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
from tb
group by iddrop table tb
看样子得用这个