【问题标题】:Multiple where clauses in one row sql一行sql中有多个where子句
【发布时间】:2012-06-06 14:16:09
【问题描述】:

我想把下面的语句融合到一个查询中。

SELECT COUNT(*) AS count1 WHERE Month='11' AND Flag = 1
SELECT COUNT(*) AS count2 WHERE Month='11' AND Flag = 2
SELECT COUNT(*) AS count1 WHERE Month='12' AND Flag = 1
    SELECT COUNT(*) AS count2 WHERE Month='12' AND Flag = 2

我希望它显示为一个查询,其中包含 count1 和 count2 列以及第 11 个月和第 12 个月的行。

这有语法吗?

【问题讨论】:

  • 为什么月份是一个字符串?
  • @Damien_The_Unbeliever 该数据是一个 Excel 工作表导入,其中包含大量垃圾数据。我最初将所有内容都作为字符串拉入,因此我可以开始将数据清理为更易于管理的格式。

标签: sql count where


【解决方案1】:

您可以将SUMCASE 组合在一起,一次性获得各种计数:

SELECT
    Month,
    SUM(CASE WHEN Flag=1 THEN 1 ELSE 0 END) as count1,
    SUM(CASE WHEN Flag=2 THEN 1 ELSE 0 END) as count2
from
    ...
WHERE Month in ('11','12')
GROUP BY
    Month /* Other columns? */

【讨论】:

  • OP 只想要两列。
  • @af,它不能在两列中完成,但仍然能够分辨每个计数是针对哪个月份
  • 我使用了它的一个变体,得到了两列,其中一列是当月的。这正是我所需要的。
【解决方案2】:

只有两列,它可以是这样的:

select
   (SELECT COUNT(*) FROM tablename WHERE Month='11' AND Flag = 1) as 'count1'
   (SELECT COUNT(*) FROM tablename WHERE Month='11' AND Flag = 2) as 'count2'

UNION ALL

select
   (SELECT COUNT(*) FROM tablename WHERE Month='12' AND Flag = 1), 
   (SELECT COUNT(*) FROM tablename WHERE Month='12' AND Flag = 2)

tablename 替换为您的表名。

【讨论】:

  • 也许你缺少一个 , 在每一行的末尾它应该是 (SELECT COUNT() FROM tablename WHERE Month='11' AND Flag = 1) as 'count1', ( SELECT COUNT() FROM tablename WHERE Month='11' AND Flag = 2) as 'count2'
【解决方案3】:

这个怎么样:

select
    month, flag, count(*)
from
    table
where
    month in ('11', '12') and
    flag in (1, 2)
group by
    month, flag;

【讨论】:

  • 但是 op 想要每个计数一列,并且只有两行
  • 注意到,只是想他会在之后用一些代码处理输出。我的意思是,谁在他们的输出中使用原始 SQL?也许那是我的冒昧... :)
  • @alexhowansky 我实际上将使用原始未触及的 SQL。这更像是一份快速报告,而不是一份应用程序。我只需要提取数据,如果我可以快速且有格式地做到这一点,它就不需要我手动将其调整为我正在寻找的格式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-09
  • 2018-09-11
相关资源
最近更新 更多