我无法正常运行用户定义的功能。我在SQL Server 2000上运行。
我正在尝试返回“BillingTransactions”表中具有均衡余额的所有用户的表。我们的交易由RecordType字段指定; 0表示购买,1表示付款。所以我要做的是获取所有用户的列表,其中每个事务与RecordType 0的总和等于每个事务与RecordType 1的总和。这就是我的函数的内部部分现在看起来像:
SELECT DISTINCT UserName FROM BillingTransactions
WHERE (SELECT SUM(AMOUNT)
FROM BillingTransactions
WHERE [BillingTransactions].[RecordType]= 0
AND
[BillingTransactions].[UserName]= UserName)
=
(SELECT SUM(AMOUNT)
FROM BillingTransactions
WHERE [BillingTransactions].[RecordType]= 1
AND
[BillingTransactions].[UserName]= UserName)
我有一种感觉,这不是最有效的方法...有没有其他方法可以看到如何去做?谢谢!
答案 0 :(得分:11)
与任何SQL查询一样,效率将由数据的实际布局(表结构,索引结构)驱动,就像查询文本一样。这是同一个查询的一个版本,它表达了相同的请求,但是逐字逐句,可能更有效:
SELECT UserName
FROM BillingTransactions
GROUP BY UserName
HAVING 0 = SUM(
CASE RecordType
WHEN 1 THEN AMOUNT
WHEN 0 THEN -AMOUNT
ELSE 0
END);
答案 1 :(得分:3)
尝试这样的事情:
select a.username
from (select username, sum(amount) totalAmount
from BillingTransactions
where RecordType = 0
group by username
) a
join (select username, sum(amount) totalAmount
from BillingTransactions
where RecordType = 1
group by username
) b on b.username = a.username and b.totalAmount = a.totalAmount