读书人

能否用SQL语句实现结果集合的拼接解决

发布时间: 2012-04-10 21:03:56 作者: rapoo

能否用SQL语句实现结果集合的拼接
比如:有张表里的数据是

1 aaa
1 bbb
1 ccc

其中aaa,bbb,ccc都是varchar类型

想通过一条语句得到aaabbbcccc这个结果

不知道我描述的是否够清楚

[解决办法]

Delphi(Pascal) code
var mNo : String;begin//假定A是得到后查询结果//使用下面的语句with A do begin  mNo='';    first;  while not eof do    begin      mNo := mNo+ Trim(FieldByName('OrderNo').AsString);       next;    end;  end;end;
[解决办法]
SQL code
-- 示例数据 DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aaa' UNION ALL SELECT 1, 'bbb' UNION ALL SELECT 1, 'ccc' -- 查询处理 SELECT * FROM( SELECT DISTINCT  id FROM @t )A OUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM @t N WHERE id = A.id FOR XML AUTO ), '<N value="', ''), '"/>', ''), 1, 1, '') )N
[解决办法]
http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html
[解决办法]
--首先在数据库的查询分析器上,创建用户自定义函数
--drop function getP
go
create function getP
(@name as nvarchar(20))
returns nvarchar(1000)
as
begin
declare @sql nvarchar(4000)
set @sql=''
select @sql= @sql+name from table2 where type=@name
return substring(@sql,1,len(@sql)-1)
end
go

利用自定义函数可以合并相同记录的。没办法贴图,可惜了。


[解决办法]
不错
create function getP
(@name as nvarchar(20))
returns nvarchar(1000)
as
begin
declare @sql nvarchar(4000)
set @sql=''
select @sql= @sql+name from table2 where type=@name
return substring(@sql,1,len(@sql)-1)
end
go

[解决办法]
if object_id('tempdb.dbo.#temp')>0
drop table #temp
create table #temp (t1 varchar(1),t varchar(4))
insert into #temp
select '1','aaa'
insert into #temp
select '2','bbb'
insert into #temp
select '3','ccc'

select * from #temp

declare @s varchar(15),
@s1 varchar(15)
select @s1=''

declare ss cursor
for
select t from #temp
open ss

fetch ss into @s
while(@@FETCH_STATUS=0)
BEGIN
select @s1=@s1+@s
fetch ss into @s


END

select @s1

close ss

deallocate ss


[解决办法]
一条语句写出来的未必就是最好的。这个问题最适合的应该是用递规查询变量。


sql 2k

SQL code
DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aaa' UNION ALL SELECT 1, 'bbb' UNION ALL SELECT 1, 'ccc' DECLARE @s VARCHAR(8000)SELECT @s=ISNULL(@s,'')+value FROM @tSELECT @s
[解决办法]
05中可以用nvarchar(max)
[解决办法]
SQL code
Create table Tab([Col1] int,[Col2] nvarchar(1))Insert Tabselect 1,N'a' union allselect 1,N'b' union all select 1,N'c' union all select 2,N'd' union all select 2,N'e' union all select 3,N'f' Go create function F_Str(@Col1 int) returns nvarchar(100) as begin     declare @S nvarchar(100)    select @S=isnull(@S+',','')+Col2 from Tab where Col1=@Col1     return @S end go Select distinct Col1,Col2=dbo.F_Str(Col1) from Tab go 


[解决办法]
//我的想法是最好能在原先sql的基础上实现这个目标
自始至终你也没有给过我们你原有的SQL,我们如果在此基础上做?



-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aaa'
UNION ALL SELECT 1, 'bbb'
UNION ALL SELECT 1, 'ccc'


-- 查询处理
SELECT *
FROM(
SELECT DISTINCT
id
FROM @t
)A
OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @t N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '') //加逗号即可
)N
[解决办法]
SQL 2005,下列语句返回数据库中所有表的名字、以及表中所有列的名字,列名之间用逗号分隔:

C# code
select [name] as [table name], ForTable.JoinResultSet(N'select [name] from sys.columns where [object_id] = ' + str(object_id), NULL, ', ') as [column names]from sys.tables/*table name                                             column names------------------------------------------------------ ---------------------------Program_Manufacturer                                   ManufacturerID, ManufacturerName, NanufacturerWebSiteTProgramDevices                                        PKey, FullName, Type, ManufacturerTProgramTypes                                          PKey, FullNameTProgramManufacturers                                  PKey, FullName...*/
[解决办法]
如果忽略长度,最简单的是
declare @str varchar(1000)
set @str=''
Select @str=@str+fid from Table1
Select @str as str
[解决办法]
SQL code
DECLARE @s VARCHAR(8000)SELECT @s=ISNULL(@s,'')+value FROM @tSELECT @s
[解决办法]
最佳答案,真接写一条SQL搞定:
select ((select col3 ¦ ¦ ',' from table where col2=aaa ) ¦ ¦
( select col3 ¦ ¦ ',' from table where col2=bbb ) ¦ ¦
( select col3 from table where col2=ccc ) ) aaa from dual
上面有一个笔误。
[解决办法]
呵呵,这个东西搞过,分我要了
declare
@s nvarchar(1000)

set @s=''--这个很重要

select @s=@s+字段 from 表


[解决办法]
-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aaa'
UNION ALL SELECT 1, 'bbb'
UNION ALL SELECT 1, 'ccc'


-- 查询处理
SELECT *
FROM(
SELECT DISTINCT
id
FROM @t
)A
OUTER APPLY(
SELECT [values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @t N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ''), '"/>', ''), 1, 1, '')
)N

好了!!!

读书人网 >.NET

热点推荐