请教SQL语句

数据表TEST,内容如下:
Int A Int B Int C
1 1 123
1 1 234
1 3 12
2 1 56
2 1 88

希望得到如下查询结构,如果写SQL语句?
Int A Int B VarChar C
1 1 123,234  
1 3 12
2 1 56,88

作者: d6f9b   发布时间: 2011-06-10

SQL code
select A,B
       C=stuff((select ','+c from tb where A=t.A and B=t.B for xml path('')),1,1,'')
from tb t

作者: zy112429   发布时间: 2011-06-10

SQL code
select A,B
       C=stuff((select ','+c from tb where A=t.A and B=t.B for xml path('')),1,1,'')
from tb t group by A,B

作者: zy112429   发布时间: 2011-06-10

SQL code
select IntA ,IntB,max(case intB when intB then intC end)as VarcharC)
from TEST group by IntA,IntB

作者: chuanzhang5687   发布时间: 2011-06-10

SQL code

create function f_str(@a int ,@b int) returns varchar(1000)
as 
begin

    select isnull(ltrim(c)+',','') from test where a=@a and b=@b


end

go

select a,b,dbo.f_str(a,b) from test

作者: cd731107   发布时间: 2011-06-10

直接用SQL解决

 

SELECT *

FROM(

  SELECT DISTINCT [id]

  FROM [test]

)A

OUTER APPLY(

  SELECT

  [nameStr]= STUFF(REPLACE(REPLACE(

  (

  SELECT [name] FROM [test] N

  WHERE [id] = A.id

  FOR XML AUTO

  ), '<N name="', ','), '"/>', ''), 1, 1, '')

)M

作者: xuexiaodong2009   发布时间: 2011-06-10

SQL code
declare   @tb table(A int,B int,C int)
insert @tb select 1 ,1 ,123
insert @tb select 1 ,1 ,234
insert @tb select 1 ,3 ,12
insert @tb select 2 ,1 ,56
insert @tb select 2 ,1 ,88

select a,B,replace((select C as 'data()' from @tb where a.A=a and a.B=B for xml path('')),' ',',') as c from @tb a
group by a,B

/*
(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)
a           B           c
----------- ----------- ---------
1           1           123,234
1           3           12
2           1           56,88

(3 行受影响)
*/

作者: ldslove   发布时间: 2011-06-10

引用 4 楼 cd731107 的回复:
SQL code

create function f_str(@a int ,@b int) returns varchar(1000)
as
begin

select isnull(ltrim(c)+',','') from test where a=@a and b=@b


end

go

select a,b,dbo.f_str(a,b) from……

SQL code
--上面的改一下
create function f_str(@a int ,@b int) returns varchar(1000)
as 
begin
    declare @sql varchar(1000)
    select isnull(@sql+',','')+ltrim(c) from test where a=@a and b=@b


end

go

select a,b,dbo.f_str(a,b) from test

作者: cd731107   发布时间: 2011-06-10

1、 STUFF

作用:

  STUFF函数将字符串插入另一字符串。它在第一个字符串中从开始位置删

除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。

语法:

  STUFF ( character_expression , start , length ,character_expression )

参数:

character_expression

  一个字符数据表达式。character_expression可以是常量、变量,也可

  以是字符列或二进制数据列。

start

  一个整数值,指定删除和插入的开始位置。如果start或length为负,

  则返回空字符串。如果start比第一个character_expression长,则返

  回空字符串。start可以是bigint类型。

  length

  一个整数,指定要删除的字符数。如果length比第一个

character_expression长,则最多删除到第一个character_expression

中的最后一个字符。Length可以是bigint类型。

返回类型:

  如果character_expression是受支持的字符数据类型,则返回字符数据。

 如果character_expression是一个受支持的 binary 数据类型,则返回二

 进制数据。

注释:

  如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长

 度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删

 除到第一个字符串中的最后一个字符。如果结果值大于返回类型支持的最

 大值,则产生错误。
、 FOR XML AUTO

将结果转换为XML结构,例如对于上面2中的student表,执行以下语句

SELECT *

FROM [student]

FOR XML AUTO

作者: xuexiaodong2009   发布时间: 2011-06-10

这个不对,不好意思
引用 3 楼 chuanzhang5687 的回复:
SQL code
select IntA ,IntB,max(case intB when intB then intC end)as VarcharC)
from TEST group by IntA,IntB

作者: chuanzhang5687   发布时间: 2011-06-10

SQL code

select A,B,C=left(C,len(C)-1)
from 
(select t2.A,t2.B,
C=(select convert(varchar,C),',' from tb t1 where t1.A=t2.A and t1.B=t2.B for xml path(''))
from tb t2
group by t2.A,t2.B) t

作者: X_0   发布时间: 2011-06-10

SQL code

数据:
id    col
----- ------
1     a
1     b
2     a
2     b
2     c
 
期望得到结果:
id     col
------ -----------
1      a,b
2      a,b,c
 
----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date   : 2009-03-15 10:19:22
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
--          Jul  9 2008 14:43:34
--          Copyright (c) 1988-2008 Microsoft Corporation
--          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 2)
-- Blog   : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[col] [nvarchar](10))
INSERT INTO [tb]
SELECT '1','a' UNION ALL
SELECT '1','b' UNION ALL
SELECT '2','a' UNION ALL
SELECT '2','b' UNION ALL
SELECT '2','c'
 
--SELECT * FROM [tb]
 
-->SQL查询如下:
--SQL2000以上版本:
IF OBJECT_ID('dbo.f_str')>0
    DROP FUNCTION dbo.f_str
GO
CREATE FUNCTION dbo.f_str
(
    @id INT
)
RETURNS VARCHAR(1000)
AS
BEGIN
    DECLARE @r VARCHAR(1000)
    SELECT @r = ISNULL(@r+',', '') + col
    FROM tb
    WHERE id = @id
    RETURN @r
END
GO
SELECT DISTINCT id,dbo.f_str(id) col FROM tb
/*
id          col
----------- ---------------------
1           a,b
2           a,b,c
 
(2 行受影响)
*/
 
-->SQL2005以上版本:
SELECT DISTINCT id,
    STUFF(
             (
                 SELECT ','+col
                 FROM tb t
                 WHERE id = tb.id FOR XML PATH('')
             ), 1, 1, ''
         ) AS col
FROM tb
/*
id          col
----------- ---------------------
1           a,b
2           a,b,c
 
(2 行受影响)
*/

作者: jxqn_liu   发布时间: 2011-06-10