22,210
社区成员
发帖
与我相关
我的任务
分享
if object_id('[tb]') is not null
drop table [tb]
go
create table [tb]([courseno] int,[name] varchar(1),[majorno] int)
insert [tb]
select 1,'a',1 union all
select 1,'b',1 union all
select 1,'c',2 union all
select 1,'a',2 union all
select 1,'b',3 union all
select 2,'c',1 union all
select 2,'d',1
go
CREATE FUNCTION dbo.f_tb(@id1 int,@id2 int )
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + name FROM tb WHERE [courseno]=@id1 and [majorno]=@id2
RETURN STUFF(@str, 1, 1, '')
END
GO
SELECT courseno, majorno,name = dbo.f_tb([courseno], majorno)
FROM tb
GROUP BY courseno, majorno
/*
courseno majorno name
----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1 a,b
1 2 c,a
1 3 b
2 1 c,d
*/
CREATE FUNCTION dbo.f_tb(@id1 int,@id2 int )
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + name FROM tb WHERE courseno=@id1 and majorno=@id2
RETURN STUFF(@str, 1, 1, '')
END
GO
SELECT courseno, majorno,name = dbo.f_tb(courseno, majorno)
FROM tb
GROUP BY courseno, majorno
----------------------------------------------------------------
-- Author :fredrickhu(小F 向高手学习)
-- Date :2009-08-21 11:29:20
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb]([courseno] int,[name] varchar(1),[majorno] int)
insert [tb]
select 1,'a',1 union all
select 1,'b',1 union all
select 1,'c',2 union all
select 1,'a',2 union all
select 1,'b',3 union all
select 2,'c',1 union all
select 2,'d',1
--------------开始查询--------------------------
select courseno, majorno,[name]=stuff((select ','+[name] from tb t where majorno=tb.majorno for xml path('')), 1, 1, '')
from tb
group by courseno, majorno
----------------结果----------------------------
/*courseno majorno name
----------- ----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1 a,b,c,d
1 2 c,a
1 3 b
2 1 a,b,c,d
(4 行受影响)
*/
create table tb (CardNo int,CardName varchar(10))
insert tb
select 001, 'AA' union all
select 001, 'BB' union all
select 001, 'CC' union all
select 002, 'DD' union all
select 002, 'EE' union all
select 003, 'FF'
go
CREATE FUNCTION dbo.f_tb(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ' ' + CardName FROM tb WHERE CardNo=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
SELECT CardNo, CardName = dbo.f_tb(CardNo) FROM tb GROUP BY CardNo
drop table tb
drop function dbo.f_tb
go
--2005 XML
if object_id('tb') is not null
drop table tb
create table tb(aa varchar(20),bb varchar(20))
insert into tb select '奥米茄', '地板' union all
select '瓷砖' ,'地板' union all
select '蒙娜丽莎','厨房设备' union all
select '实木复合地板' ,'涂料'
select [values]=stuff((select '|'+aa from tb t where bb=tb.bb for xml path('')), 1, 1, ''),bb
from tb
group by bb
/*bb values
-------------------- --------------------
厨房设备 蒙娜丽莎
地板 奥米茄|瓷砖
涂料 实木复合地板
(3 行受影响)
*/