解析SQL Server 2005 溢用之:合并列值

來源:互聯網
上載者:User

  很多人可能發現,無論是在sql 2000, 還是在 sql 2005 中,都沒有提供字串的彙總函式, 所以, 當我們在處理下列要求時,會比較麻煩, 但在 SQL Server 2005中, 這種情況得到了改善, 我們可以輕鬆地完成這項處理。

問題描述:
無論是在sql 2000, 還是在 sql 2005 中,
都沒有提供字串的彙總函式, 所以, 當
我們在處理下列要求時,會比較麻煩:
有表tb, 如下:
id  value
----- ------
1   aa
1   bb
2   aaa
2   bbb
2   ccc
需要得到結果:
id   values
------ -----------
1   aa,bb
2   aaa,bbb,ccc
即, group by id, 求 value 的和(字串相加)

  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 行受影響)
--*/

  注: 合并與分拆的CLR, sql2005的樣本中有:

  在安裝sql 2005的樣本後,預設安裝目錄為 drive:Program FilesMicrosoft SQL Server90SamplesEngineProgrammabilityCLRStringUtilities中。



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。