2016-11-28 3 views
0

私はビジネスのすべてのトランザクションのテーブルを持っています。すべてのトランザクションの現金、現金、クレジットまたはデビットの一覧を示す支払方法の列があります。(トランザクションタイプの)複数の単一のSQLクエリでのカウント

私がしたいことは、各トランザクションがどのように完了したかをカウントする2つの列を作成することです.1つは列Cash、もう1つはすべての与信と借方の購入を含むカードです。

SELECT COUNT (*) as CashTransactions 
FROM Transaction 
WHERE PaymentMethod='Cash' 

そして、何私は出力になりたいことは、ここでのオプションの

Cash Transactions |  Card Transactions 

(Count of Cash) | (Count of Credit AND Debit) 
+0

良い質問。より良い質問は、ここに投稿する前に質問を調査したという事実を表示することです。 [尋ねる前に](http://www.catb.org/~esr/faqs/smart-questions.html#before)を見てください。あなたはStackoverflowを検索しましたか?ウェブはいかがですか?あなたが見つけたものがあなたの問題を解決しなかったのはなぜですか?あなたの質問に調査した内容を表示します。 – MikeJRamsey56

答えて

0

カップルです:

は、ここで私がこれまで持っているものです。オプション1を強くお勧めします。よりクリーンで高速です。 2

PaymentMethod | NumberOfTransactions 
------------------------------------ 
Cash   | 33 
Credit  | 12 
Debit   | 87 

またはオプション:で得られ

SELECT PaymentMethod, COUNT(*) AS NumberOfTransactions 
FROM Transaction 
GROUP BY PaymentMethod 

オプション1

SELECT (
SELECT COUNT(*) AS NumberOfTransactions 
FROM Transaction 
WHERE PaymentMethod = 'Cash' 
) as CashTransactions, 
(
SELECT COUNT(*) AS NumberOfTransactions 
FROM Transaction 
WHERE NOT PaymentMethod = 'Cash' 
) as OtherTransactions 

はで得られた:

CashTransactions| OtherTransactions 
------------------------------------ 
33    | 99 
+0

thx bbは、魅力のように動作します。パーセンテージ/フリークエンシー列を作成する簡単な方法はありますか?それとも大規模なサブクエリを含むだろうか? – NickA

0

だけで、カウントするのではなく、総括:

SELECT 
    ABS(SUM(PaymentMethod = 'Cash')) AS CashTransactions, 
    ABS(SUM(PaymentMethod <> 'Cash')) AS CardTransactions 
FROM 
    Transaction 
0

あなたは、SQLサーバーを使用する場合は、このクエリを試すことができます。

SELECT 
    SUM(CASE WHEN PaymentMethod='Cash' THEN 1 ELSE 0 END) as CashTransaction, 
    SUM(CASE WHEN PaymentMethod IN ('Credit','Debit') THEN 1 ELSE 0 END) as CardTransaction 
FROM Transaction 

しかし、あなたはMS-アクセスを使用している場合、クエリでこのクエリを試すことができます:

SELECT sum(IIF(PaymentMethod='Cash',1,0)) as CashTransaction, sum(IIF(PaymentMethod in ('Credit','Debit'),1,0)) as CardTransaction 
FROM Transaction; 
関連する問題