【问题标题】:Return Count for multiple variables in SQLSQL中多个变量的返回计数
【发布时间】:2021-09-22 09:35:25
【问题描述】:

我正在寻找一个 SQL 查询,它返回等于“已赎回”的值的数量。我的列标题如下:

我的查询:

    Select
        Count(StatusendJanuary2021),
        Count(StatusendFebruary2021),
        Count(StatusendMarch2021),
        Count(StatusendApril2021)
    From
        SnowTable
    Where
        StatusendJanuary2021 = 'redeemed'
        Or
        StatusendFebruary2021 = 'redeemed'
        Or
        StatusendMarch2021 = 'redeemed'
        Or
        StatusendApril2021 = 'redeemed' 

返回每个月的固定结果,而不是每个月的实际金额:

谁能告诉我如何重组查询以输出每个月的“已兑换”正确计数?

【问题讨论】:

  • 您已使用 Excel 和 Access 标记了您的问题 - 请更详细地解释您的用例 - 您如何使用 Excel 中的 Access 或反之亦然?
  • 另外,为什么你有一个非规范化的SnowTable?您没有包含面向行数据的规范化表吗?

标签: sql excel ms-access


【解决方案1】:

尽管 JET/Access 的 SQL 方言被及时冻结,除了 SQL-92 之外没有真正的进步(羞辱微软!),它确实 em> 似乎支持COUNT 中的表达式,所以你可以使用IIF,像这样:

Count + IIF - Access query

SELECT
    COUNT( IIF( StatusendJanuary2021  = 'redeemed', 1, NULL ) ) AS Count_2021_01,
    COUNT( IIF( StatusendFebruary2021 = 'redeemed', 1, NULL ) ) AS Count_2021_02,
    COUNT( IIF( StatusendMarch2021    = 'redeemed', 1, NULL ) ) AS Count_2021_03,
    COUNT( IIF( StatusendApril2021    = 'redeemed', 1, NULL ) ) AS Count_2021_04
FROM
    SnowTable

【讨论】:

    【解决方案2】:

    您可以使用条件聚合。在 MS Access 中,这使用 iif():

    Select sum(iif(StatusendJanuary2021 = "redeemed", 1, 0)),
           sum(iif((StatusendFebruary2021 = "redeemed", 1, 0)),
           sum(iif((StatusendMarch2021 = "redeemed", 1, 0)),
           sum(iif((StatusendApril2021 = "redeemed", 1, 0))
    From SnowTable
    

    【讨论】:

    • 啊,是的,SUM( 1 or 0 )COUNT( x or NULL ) 之间的大辩论
    • 顺便说一句,Access/JET 真的不喜欢分号,你可能想给你的列命名。
    • @戴。 . .在我看来没有争论,特别是在 MS Access 中,您需要明确包含 NULL。少打字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多