【发布时间】:2010-10-29 14:27:57
【问题描述】:
我有一个不带参数的存储过程,它返回两个字段。存储过程汇总了应用于租户的所有事务,并返回余额和租户 ID。
我想使用它通过查询返回的记录集,我需要将它的结果加入到租户的 id 中。
这是我当前的查询:
SELECT t.TenantName, t.CarPlateNumber, t.CarColor, t.Sex, t.SSNO, t.Phone, t.Memo,
u.UnitNumber,
p.PropertyName
FROM tblTenant t
LEFT JOIN tblRentalUnit u
ON t.UnitID = u.ID
LEFT JOIN tblProperty p
ON u.PropertyID = p.ID
ORDER BY p.PropertyName, t.CarPlateNumber
存储过程是这样的:
SELECT tenant.ID AS TenantID, SUM(ISNULL(trans.Amount,0)) AS TenantBalance FROM tblTenant tenant
LEFT JOIN tblTransaction trans
ON tenant.ID = trans.TenantID
GROUP BY tenant.ID
我也想将存储过程中的余额添加到其中。
我该怎么做?
【问题讨论】:
-
你的问题和你的示例代码没有捆绑在一起——你谈论交易和用户;样本是关于租户和出租物业的。
-
租户 = 用户。我想在查询中添加余额,因为它是用于报告,并且它还需要有关租户居住的财产的所有信息。
-
另外,为什么要在出租单元和属性表之间使用 LEFT OUTER JOIN?您不应该让您的数据库处于可能需要它的引用不完整状态(您应该在出租单元和财产之间有一个外键约束,以防止出租单元中的无效代码)。
-
抱歉,打错了。谢谢你抓住那个。这些表格链接租户 -> 出租单元 -> 财产。
-
您对 SP 的描述暗示它返回一行 - 但我从进一步的讨论中得到它为每个租户返回一个包含一行的结果集。实际上,它返回一个表。由于您使用的是 SQL Server,我不知道是否有办法让它将来自 SP 的结果集视为表。在至少一个其他 DBMS 中,您可以使用 TABLE(MULTISET(EXECUTE FUNCTION spname())) AS Alias(Balance, ID) 作为 FROM 子句的一部分。
标签: sql sql-server-2005-express