문제

이것은 일반적인 SQL 질문이지만, 데이터베이스가 Firebird 인 것을 알아야하는 경우에는 다음과 같습니다.

i이 테이블이 있습니다 (단순화 된) :

user  amount  type
--------------------
john  25      credit
john  20      debit
john  5       debit
john  15      credit
mike  15      credit
.

단일 쿼리를 사용하여 다음과 같이 결과를 갖고 싶습니다.

user  credit  debit
--------------------
john  40      25
mike  15      NULL
.
Where credit = SUM(amount) WHERE type=credit
   and debit = SUM(amount) WHERE type=debit
.

기본적으로 필드의 합계 (이 경우 금액)는 필드의 합계를 기반으로 한 결과에 여러 개의 필드를 갖고 있습니다 (이 경우 유형).

어떤 제안에 미리 감사드립니다.

도움이 되었습니까?

해결책

표준 SQL은 다음과 같습니다 :

SELECT "user",
    SUM(CASE WHEN type='credit' then amount END) as Credit,
    SUM(CASE WHEN type='debit' then amount END) as Debit
FROM
    "table"
GROUP BY
    "user"
.

다른 팁

나는 파이어 버드가 어떻게되는지 모르겠지만, 당신은 다음과 같은 일을 할 수 있습니까?

SELECT user, 
sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS credit, 
sum(SELECT amount FROM table AS t3 WHERE t3.user = t1.user AND type="debit" ) AS debit
FROM table AS t1
GROUP BY user
ORDER BY user
.

PostgreSQL에있을 것으로 생각하는 것을 참조하는 경우, 필요한 것을 찾는 데 도움이되는 경우

시도 :

SELECT credit.user_name, credit.cre, debit.deb
  FROM (SELECT user_name, SUM(amount) cre FROM t WHERE TYPE = 'credit' GROUP BY user_name) credit
  LEFT OUTER JOIN (SELECT user_name, SUM(amount) deb
                     FROM t
                    WHERE TYPE = 'debit'
                    GROUP BY user_name) debit
    ON (credit.user_name = debit.user_name)
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top