質問

これは一般的なSQLの質問ですが、データベースがFirebirdでなければならない場合は私は

このテーブル(簡素化):

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