客户表 -------------- 身份证名称 1 詹姆斯 2彼得
订单表 --------------- 订单 ID 客户 ID 100 1 101 1 102 2
如何编写返回类似这样的查询
ID、姓名、订单列表 1,詹姆斯,“100,101” 2、彼得,“102”
在 Sybase 中,我有一个名为 LIST 的函数,我可以使用它,但我在 SQL SERVER 中找不到类似的函数
客户表 -------------- 身份证名称 1 詹姆斯 2彼得
订单表 --------------- 订单 ID 客户 ID 100 1 101 1 102 2
如何编写返回类似这样的查询
ID、姓名、订单列表 1,詹姆斯,“100,101” 2、彼得,“102”
在 Sybase 中,我有一个名为 LIST 的函数,我可以使用它,但我在 SQL SERVER 中找不到类似的函数
请试试:
select ID, [Name],
(select OrderID+',' from OrderTable where CustID=ID
group by OrderID for xml path('')) AS ListOfOrders
From CustomerTable
创建一个用户定义的函数,如下所示
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
下面的链接给出了一个非常简单方便的解决方案。
写在该链接上的 SQL 查询在图像中......所以我无法在此处复制它。
从 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)