12
客户表
--------------
身份证名称
1 詹姆斯
2彼得
订单表
---------------
订单 ID 客户 ID
100 1
101 1
102 2

如何编写返回类似这样的查询

ID、姓名、订单列表
1,詹姆斯,“100,101”
2、彼得,“102”

在 Sybase 中,我有一个名为 LIST 的函数,我可以使用它,但我在 SQL SERVER 中找不到类似的函数

4

4 回答 4

13

请试试:

select ID, [Name],
(select OrderID+',' from OrderTable where CustID=ID
group by OrderID for xml path('')) AS ListOfOrders
From CustomerTable
于 2012-09-15T07:09:18.417 回答
1

创建一个用户定义的函数,如下所示

CREATE FUNCTION [dbo].[CommaSeperatedOrderIDs](@CustId INT) returns varchar(Max)
AS  
BEGIN   

DECLARE @CommaSeperatedValues VARCHAR(MAX)
SELECT @CommaSeperatedValues = COALESCE(@CommaSeperatedValues+',' , '') + OrderID
FROM OrderTable WHERE CustId = @CustId
RETURN @CommaSeperatedValues

END

接着,

select ID, [Name], ([dbo].[CommaSeperatedOrderIDs](ID)) AS ListofOrders
From CustomerTable
于 2012-09-15T07:30:58.960 回答
0

下面的链接给出了一个非常简单方便的解决方案。

http://tejasnshah.wordpress.com/2009/02/28/sql-server-get-column-values-as-comma-seperated-list-using-xml-path-instead-of-udfs-using-sql-合并/

写在该链接上的 SQL 查询在图像中......所以我无法在此处复制它。

于 2013-01-27T00:45:10.293 回答
0

从 Sheikh Haris 的链接中添加完整的详细信息。

鉴于此表:

在此处输入图像描述

要获得如下输出:

在此处输入图像描述

使用以下 SQL:

SELECT field1,
    Substring(convert(varchar(100),
    (
    SELECT (', ' + field2)
        FROM #test t2
        WHERE t1.field1 = t2.field1
        ORDER BY field1, field2
    FOR XML PATH( '' )
                    )), 3, 1000 )
FROM #test t1
GROUP BY field1

我向子字符串添加了一个转换函数,以便显示 WIDEMEMO 字段(SQL Server)

于 2015-07-22T14:37:55.033 回答