2013-05-17 89 views
3

我嘗試使用SQL Server 2000中的GROUP_CONCAT功能,但它返回一個錯誤:SQL Server 2000中相當於GROUP_CONCAT功能

'group_concat' is not a recognized function name"

所以我想有一個其他功能在SQL Server 2000 group_concat?你能告訴我它是什麼嗎?

+0

你的意思是mysql中的「你的SQL」因爲這不是真正的標籤。 – Zane

回答

9

不幸的是,由於您使用的是SQL Server 2000,因此不能使用FOR XML PATH將值連接在一起。

比方說,我們有下面的示例數據:

CREATE TABLE yourtable ([id] int, [name] varchar(4)); 

INSERT INTO yourtable ([id], [name]) 
VALUES (1, 'John'), (1, 'Jim'), 
    (2, 'Bob'), (3, 'Jane'), (3, 'Bill'), (4, 'Test'), (4, ''); 

一個你可以生成列表在一起的辦法是create a function。樣本函數是:

CREATE FUNCTION dbo.List 
( 
    @id int 
) 
RETURNS VARCHAR(8000) 
AS 
BEGIN 
    DECLARE @r VARCHAR(8000) 
     SELECT @r = ISNULL(@r+', ', '') + name 
     FROM dbo.yourtable 
     WHERE id = @id 
     and Name > '' -- add filter if you think you will have empty strings 
    RETURN @r 
END 

然後,當您查詢數據,您將通過一個值的函數將數據連接成單行:

select distinct id, dbo.list(id) Names 
from yourtable; 

SQL Fiddle with Demo。這給你一個結果:

| ID |  NAMES | 
------------------- 
| 1 | John, Jim | 
| 2 |  Bob | 
| 3 | Jane, Bill | 
| 4 |  Test | 
+0

您應該爲Name>''添加另一個where子句條件。這將保護您免受空值和空字符串的影響,這會使輸出不正確或者很奇怪。 –

+0

@Gastros Yup,忘了那個。更新,謝謝! – Taryn