我无法正常运行用户定义的功能。我在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)

我觉得这不是最有效的方法......有没有其他方法你可以看到如何去做?谢谢!

有帮助吗?

解决方案

与任何SQL查询一样,效率将由数据的实际布局(表结构,索引结构)驱动,就像查询文本一样。这是同一个查询的一个版本,它表达了相同的请求,但是逐字逐句,可能更有效:

SELECT UserName 
FROM BillingTransactions
GROUP BY UserName
HAVING 0 = SUM(
  CASE RecordType 
  WHEN 1 THEN AMOUNT 
  WHEN 0 THEN -AMOUNT 
  ELSE 0
  END);

其他提示

尝试这样的事情:

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top