SQL用户定义函数问题

时间:2009-10-22 22:00:51

标签: sql user-defined-functions

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

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

2 个答案:

答案 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