能否用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
好了!!!