一行sql中有多个where子句
我想把下面的语句合并成一个查询一行sql中有多个where子句,sql,count,where,Sql,Count,Where,我想把下面的语句合并成一个查询 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 我想将其显
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,行为month 11和month 12
这个有语法吗?这个怎么样:
select
month, flag, count(*)
from
table
where
month in ('11', '12') and
flag in (1, 2)
group by
month, flag;
只有两列,它可以是这样的:
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
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,它不能在两列中完成,并且仍然能够分辨每个计数的月份。我使用了这个的一个变体,得到了两列,一列为月份。这就是我所需要的。为什么月份是一个字符串?@Damien_不相信这个数据是一个excel表格导入,里面有很多垃圾数据。我最初将所有内容都作为字符串拉入,这样我就可以开始将数据清理成更易于管理的格式。但是op希望每个计数有一列,并且只有两行,他只是想在之后用一些代码处理输出。我的意思是,谁在他们的输出中使用未触及的原始SQL?也许这是我的臆断…:@alexhowansky我实际上将使用原始的非接触式SQL。这与其说是一个应用程序,不如说是一个快速报告。我只需要拉取数据,如果我能快速且以格式完成,就不需要手动将其调整为我正在寻找的格式。也许您缺少了一个,在每行的末尾,它应该是SELECT COUNT FROM tablename,其中MOUNT='11'和Flag=1为'count1',从tablename中选择COUNT,其中Month='11'和Flag=2为'count2'