문제

사용자 정의 기능을 올바르게 작동시키는 데 어려움이 있습니다. SQL Server 2000에서 실행 중입니다.

"BillingTransactions"테이블에서 균형이 높은 모든 사용자의 테이블을 반환하려고합니다. 우리의 거래는 RecordType 필드에 의해 지정됩니다. 구매의 경우 0, 결제 1은 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