【问题标题】:Multiple Counts (of transaction type) in single SQL Query单个 SQL 查询中的多个计数(事务类型)
【发布时间】:2017-04-12 18:49:35
【问题描述】:

所以我有一个企业所有交易的表格,很简单,它有一个支付方式列,列出了所有交易是如何进行的,现金、信用卡或借记卡。

我想做的是使用查询创建两列来计算每笔交易是如何完成的,一列是现金,另一列是卡,其中包括所有信用卡和借记卡购买。

这是我目前所拥有的:

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

而我想要的输出是

Cash Transactions  |       Card Transactions

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

【问题讨论】:

  • 好问题。一个更好的问题是在将问题发布到此处之前显示您已经研究过您的问题的事实。看Before you ask。你搜索过 Stackoverflow 吗?网络呢?为什么你发现的东西没有解决你的问题?显示您在问题中研究过的内容。

标签: sql ms-access count


【解决方案1】:

这里有几个选项。我强烈推荐选项一,它更干净、更快捷。

选项 1

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

导致:

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

选项2

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

【讨论】:

  • thx bb,就像一个魅力。是否也有一种简单的方法来制作百分比/频率列?还是会涉及大量子查询?
【解决方案2】:

如果你使用sql server,可以试试这个查询:

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-access,在查询中,你可以试试这个查询:

SELECT sum(IIF(PaymentMethod='Cash',1,0)) as CashTransaction, sum(IIF(PaymentMethod in ('Credit','Debit'),1,0)) as CardTransaction
FROM Transaction;

【讨论】:

    【解决方案3】:

    只是总结而不是计数:

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

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      相关资源
      最近更新 更多