34,576
社区成员
发帖
与我相关
我的任务
分享
create table tb (a varchar(10),b varchar(10))
insert tb
select '2009', 'AA' union all
select '2009', 'BB' union all
select '2008', 'CC' union all
select '2007', 'XX' union all
select '2009', 'HH' union all
select '2008', 'DD' union all
select '2007', 'SS' union all
select '2006', 'GG'
go
select * from tb
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(b as varchar)
FROM tb
WHERE a=@col1
RETURN(STUFF(@re,1,1,''))
END
GO
select a,dbo.f_str(a)[b] from tb group by a
a b
---------- -------------------
2006 GG
2007 XX,SS
2008 CC,DD
2009 AA,BB,HH
(所影响的行数为 4 行)
create table mail(id int identity,email varchar(20),mjstart int,mjstop int,keyword char(10))
insert into mail select
'1@1.com',20,50 ,'上海'union all select
'2@2.com',50,100,'北京'
create table house (id int identity,htype char(10),mj int,money int,title char(10))
insert into house select
'出租',30,500,'上海' union all select
'出租',70,500,'北京' union all select
'出租',70,500,'北京' union all select
'出租',30,500,'上海' union all select
'出租',70,500,'上海'
select px=(case when title='北京' then 1 else 2 end),h.*,email into ntabl from mail join house h on mail.keyword=h.title
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = '<'
SELECT @r = @r + ''+rtrim(title)+''
FROM ntabl
WHERE px=@id
RETURN STUFF(@r, 1, 1, '')
END
GO
select (select top 1 email from ntabl n where n.px=px) as 邮箱, value = dbo.f_str(px) from ntabl group by px
/*
邮箱 value
-------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1@1.com 北京北京
1@1.com 上海上海上海
(所影响的行数为 2 行)
*/