当前位置:编程学习 > C#/ASP.NET >>

问个SQL语句!

请问一下如何用一条SQl语句实现下面的查询结果:
  对于表table1
中的记录如下:
ID   Values
1    111
2    222
1    333
2    444
3    555


要求实现查询结果是这样的:

ID   Values
1    111,333
2    222,444
3    555
请问如何写这条语句?
--------------------编程问答-------------------- mark --------------------编程问答-------------------- 顶,关注~~~ --------------------编程问答-------------------- SQL Server 中多行多列连接成为单行单列 
http://www.cnblogs.com/Jinglecat/archive/2007/07/11/813387.html --------------------编程问答-------------------- create function test(@id int)
returns nvarchar(4000)
as
begin
declare @s nvarchar(4000)
set @s = ''
select @s=@s+','+column from testable where id=@id
return @s
end 

select id,dbo.test(id) from testable group by id --------------------编程问答-------------------- create table table1
(
id int,
[values] varchar(20)
)
go

INSERT INTO table1(id, [values])
SELECT 1, '111'
UNION ALL
SELECT 2, '222'
UNION ALL
SELECT 1, '333'
UNION ALL
SELECT 2, '444'
UNION ALL
SELECT 3, '555'

go

create function conv(@id int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select  @ret =  [values] + ',' + @ret from table1 where id = @id order by [values] desc
set @ret = left(@ret,len(@ret)-1)
return @ret
end
go
select id,dbo.conv(id) [values] from table1 group by id order by id --------------------编程问答-------------------- 1 111,333
2 222,444
3 555
--------------------编程问答-------------------- 不用存储过程可不可以实现? --------------------编程问答-------------------- up --------------------编程问答-------------------- 这道题目是我出的面试的数据库部分的考题.
难道你来我们公司面试过? --------------------编程问答-------------------- LZ
那是用自定义函数来实现的,不是储存过程。 --------------------编程问答-------------------- 关注哈
顶 --------------------编程问答-------------------- 不用 自定义函数 无法满足复杂

你可以看到 自定义函数 做了一个【中间桥梁】的功能

单纯的一段批处理的 SQL 语句,我没有发现有效方案 --------------------编程问答-------------------- 这题就没有简单一点的SQL语言了?
关注中 --------------------编程问答-------------------- 这编文章里有: http://10f0tdgko6ed8o8ta6s5.248886.com --------------------编程问答-------------------- select id,convert(varchar(10),min([values]))+','+convert(varchar(10),max([values]))
from aa
group by id
having min([values])<>max([values])
union
select id,convert(varchar(10),min([values]))
from aa
group by id
having min([values])=max([values]) --------------------编程问答-------------------- aa table1
--------------------编程问答-------------------- 楼主呢?给分。 --------------------编程问答-------------------- Top  
 haonanernet(与时俱进) ( ) 信誉:100  2007-08-17 12:43:56  得分: 0  
 
 
   这道题目是我出的面试的数据库部分的考题.
难道你来我们公司面试过?
  
 
--------------------
呵呵....,看LZ都不敢再来给分了呢! --------------------编程问答-------------------- 我做过,用自定义函数:
create function f_string(@Pgpa_pg_id varchar(10))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
    declare @tem table( p_id int primary key)
   insert into @tem select Pgpg_pod_id from PurviewGroupPurAssign 
where Pgpa_pg_id = @Pgpa_pg_id
   select @ret = @ret+','+cast(p_id as varchar(10))from @tem 
/*set @ret = stuff(@ret,1,1,'')*/
return @ret 
end
然后再用分组查询 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- /* 原表
ID          SCORE
----------- -----------
1           100
2           200
2           400
1           400
*/


SELECT * FROM 
(
 Select DISTINCT id FROM table1
) A
 OUTER APPLY
(
  Select [Values] = 
    STUFF(REPLACE(REPLACE((
    Select Values FROM table1 N Where id = A.id FOR XML AUTO
  ), '<N Values="', ','), '"/>', ''), 1, 1, '')

)N


/*  结果
id          A
----------- --------
1           100,400
2           200,400
*/



--------------------编程问答-------------------- 写错了

/* 原表
ID          Values
----------- -----------
1           100
2           200
2           400
1           400
*/


SELECT * FROM 
(
 Select DISTINCT id FROM table1
) A
 OUTER APPLY
(
  Select [Values] = 
    STUFF(REPLACE(REPLACE((
    Select Values FROM table1 N Where id = A.id FOR XML AUTO
  ), '<N Values="', ','), '"/>', ''), 1, 1, '')

)N


/*  结果
id          Values
----------- --------
1           100,400
2           200,400
*/



--------------------编程问答-------------------- jf up 学习 --------------------编程问答-------------------- 我把上面的那位老兄的语句用db2实现了一下,他真聪明: 

 select id,min(values)||','||max(values)
from lrftest
group by id
having min(values)<>max(values)
union
select id,min(values)
from lrftest
group by id
having min(values)=max(values) --------------------编程问答-------------------- up --------------------编程问答-------------------- -- 通过递归 SELECT 连接指定列存储到临时变量中
        SELECT @RetVal = Column2 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val

这句我看不太懂,谁能说说么? --------------------编程问答-------------------- 路过,这题又不是你出的

My-Blog地址1:http://www.cnblogs.com/nyzfl
My-Blog地址2: http://blog.csdn.net/nyzfl --------------------编程问答-------------------- mark --------------------编程问答-------------------- 这种方法真的可以吗?如果一个ID对应诉value多于3条不知道是否还能得出正确的结果?

=========
 回复人:tracyLD() ( 一级(初级)) 信誉:100  2007-8-17 16:20:43  得分:0


select id,convert(varchar(10),min([values]))+','+convert(varchar(10),max([values]))
from aa
group by id
having min([values])<>max([values])
union
select id,convert(varchar(10),min([values]))
from aa
group by id
having min([values])=max([values]) --------------------编程问答-------------------- up --------------------编程问答-------------------- Mark --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- select min(value),decode(max(value),min(value),null,max(value)) 
from table_name group by id;
Oracle的 --------------------编程问答-------------------- 如果很多的话,那劝你最好是写函数或存储过程。
  这种方法应该是不太好弄。写出来了也比较麻烦。 --------------------编程问答-------------------- 学习
--------------------编程问答-------------------- mark --------------------编程问答-------------------- 路过 学习 --------------------编程问答-------------------- http://10f0tdgko6ed8o8ta6s5.248886.com --------------------编程问答-------------------- 学习学习 --------------------编程问答-------------------- 学习学习
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,