SQL-将多个记录连接到一个记录
我有一个SQL Server数据库,其中包含以下表格: 客户端(客户端ID、客户端名称) 销售代理(AgentID,AgentName) 项目(项目ID,说明) 采购(采购ID、客户ID、项目ID、价格) PurchaseSalesAgent(PurchaseID,AgentID) 每次购买对一个客户来说只是一件物品,但可能涉及多个代理。我想返回以下列列表: 客户名称、描述、价格、代理 其中Agents是参与购买的所有代理的名称。可以作为逗号分隔的列表,也可以作为多个列,每个列中有一个代理SQL-将多个记录连接到一个记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个SQL Server数据库,其中包含以下表格: 客户端(客户端ID、客户端名称) 销售代理(AgentID,AgentName) 项目(项目ID,说明) 采购(采购ID、客户ID、项目ID、价格) PurchaseSalesAgent(PurchaseID,AgentID) 每次购买对一个客户来说只是一件物品,但可能涉及多个代理。我想返回以下列列表: 客户名称、描述、价格、代理 其中Agents是参与购买的所有代理的名称。可以作为逗号分隔的列表,也可以作为多个列,每个列中有一个代理 我正
我正在寻找一种与SQL Server 2000兼容的方法,但我也对SQL Server 2008中是否有更好的方法感兴趣。在SQL 2008中,您应该使用for XML PATH(“”)。。。比如:
select c.clientname, i.description, p.price,
stuff((select ', ' + a.AgentName
from SalesAgent sa join PurchaseSalesAgent psa on psa.AgentID = sa.AgentID
where psa.PurchaseID = p.purchaseID
for xml path('')),1,2,'') as Agents
from client c
join purchase p on p.clientid = c.clientid
join item i on i.itemid = p.itemid
;
在SQL 2000中,没有很好的实现方法。使用SQL Server 2008,您可以尝试
DECLARE @Client TABLE (ClientID INT, ClientName VARCHAR(10))
DECLARE @SalesAgent TABLE (AgentID INT, AgentName VARCHAR(10))
DECLARE @Item TABLE (ItemID INT, Description VARCHAR(10))
DECLARE @Purchase TABLE (PurchaseID INT , ClientID INT, ItemID INT, Price FLOAT)
DECLARE @PurchaseSalesAgent TABLE (PurchaseID INT, AgentID INT)
SELECT c.ClientName,
i.Description,
p.Price ,
(
SELECT sa.AgentName + ','
FROM @SalesAgent sa
WHERE sa.AgentID = pa.AgentID
FOR XML PATH('')
) Agents
FROm @Client c INNER JOIN
@Purchase p ON c.ClientID = p.ClientID INNER JOIN
@PurchaseSalesAgent pa ON p.PurchaseID = pa.PurchaseID INNER JOIN
@Item i ON p.ItemID = i.ItemID
编辑
我假设购买表有一个列ItemID INT链接到项目表返回可变列数不是一个好主意。您的
购买表
没有任何对项目
表的引用。感谢您提醒我关于ItemID的问题。当您说这不是一个好主意时,有什么具体的原因吗?谢谢,如果使用SQL Server 2000也会很好,但这对SQL 2008非常有用。