金沙棋牌app手机下载

当前位置:金沙棋牌 > 金沙棋牌app手机下载 > 多行合一行,SQL中的行合并问题

多行合一行,SQL中的行合并问题

来源:http://www.logblo.com 作者:金沙棋牌 时间:2019-11-07 00:47

sql多行统十分一风流罗曼蒂克行

主题素材叙述:
无论在sql 二〇〇三,仍旧在 sql 二零零六 中,都未曾提供字符串的聚合函数,
  所以,当大家在管理下列须求时,会相比麻烦:
有表tb, 如下:
id    value

sql server


SELECT [activityId],
--STUFF(
(SELECT ',' + Cast(A.phone AS varchar)
FROM aaa A
WHERE A.activityId=B.activityId
FOR XML PATH(''))
--,1,1,'') AS phones
FROM aaa B
GROUP BY [activityId]

1     aa
1     bb
2     aaa
2     bbb
2     ccc
急需拿到结果:
id     values

mysql


SELECT
activityId,
group_concat(DISTINCT phone ORDER BY phone DESC SEPARATOR ';') AS phones
FROM
aaa 
GROUP BY
activityId

1      aa,bb
2      aaa,bbb,ccc
即, group by id, 求 value 的和(字符串相加卡塔尔

  1. 旧的解决办法

-- 1. 开立管理函数
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @r varchar(8000)
    SET @r = ''
    SELECT @r = @r + ',' + value
    FROM tb
    WHERE id=@id
    RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数

SELECt id, values=dbo.f_str(id)
FROM tb
GROUP BY id

-- 2. 新的消除格局
-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aa'
UNION ALL SELECT 1, 'bb'
UNION ALL SELECT 2, 'aaa'
UNION ALL SELECT 2, 'bbb'
UNION ALL SELECT 2, '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

/*--结果
id          values


1           aa,bb
2           aaa,bbb,ccc
(2 行受影响)
--*/

本文由金沙棋牌发布于金沙棋牌app手机下载,转载请注明出处:多行合一行,SQL中的行合并问题

关键词: