2017-08-29 47 views
2

我很难得到此查询返回1行中的计数。 结果显示1行,如果有(在这种情况下像2016)是用不同的年没有事务IFNULL查询给出2行相同的结果

,但是当我插入具有不同年交易然后执行该代码,以2行与相同的结果示出了结果

这里的

select 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=1)AND (YEAR(date)='2017'))),0) AS `Jan`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=2)AND (YEAR(date)='2017'))),0) AS `Feb`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=3)AND (YEAR(date)='2017'))),0) AS `Mar`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=4)AND (YEAR(date)='2017'))),0) AS `Apr`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=5)AND (YEAR(date)='2017'))),0) AS `May`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=6)AND (YEAR(date)='2017'))),0) AS `Jun`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=7)AND (YEAR(date)='2017'))),0) AS `Jul`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=8)AND (YEAR(date)='2017'))),0) AS `Aug`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=9)AND (YEAR(date)='2017'))),0) AS `Sep`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=10)AND (YEAR(date)='2017'))),0) AS `Oct`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=11)AND (YEAR(date)='2017'))),0) AS `Nov`, 
      ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=12)AND (YEAR(date)='2017'))),0) AS `Dec` 
     from transaction GROUP BY YEAR(date) 

我试图做我的项目年度报告的代码,有没有什么办法来解决这个问题或其他疑问,可以使它的工作原理?

回答

1

,如果你想只为2017年,你应该在

select 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=1)AND (YEAR(date)='2017'))),0) AS `Jan`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=2)AND (YEAR(date)='2017'))),0) AS `Feb`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=3)AND (YEAR(date)='2017'))),0) AS `Mar`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=4)AND (YEAR(date)='2017'))),0) AS `Apr`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=5)AND (YEAR(date)='2017'))),0) AS `May`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=6)AND (YEAR(date)='2017'))),0) AS `Jun`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=7)AND (YEAR(date)='2017'))),0) AS `Jul`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=8)AND (YEAR(date)='2017'))),0) AS `Aug`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=9)AND (YEAR(date)='2017'))),0) AS `Sep`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=10)AND (YEAR(date)='2017'))),0) AS `Oct`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=11)AND (YEAR(date)='2017'))),0) AS `Nov`, 
     ifnull((SELECT COUNT(id) FROM (transaction)WHERE((Month(date)=12)AND (YEAR(date)='2017'))),0) AS `Dec` 
    from transaction 
    where YEAR(date)='2017' 
    GROUP BY YEAR(date) 

否则筛选这对于每次你在你的数据同样选择在IFNULL(与2017年)有数据执行和返回相同的值

您可避免无用的()和子查询如:

select 
     sum(case when month(date)=1 and YEAR(date) = '2017' then 1 else 0 end) as 'Jan' 
     sum(case when month(date)=2 and YEAR(date) = '2017' then 1 else 0 end) as 'Feb' 
     ...... 
     sum(case when month(date)=12 and YEAR(date) = '2017' then 1 else 0 end) as 'Dec' 
from transaction 
    where YEAR(date)='2017' 
    GROUP BY YEAR(date) 
1
select 
SUM(Month(date)=1) AND (YEAR(date)='2017') AS `Jan`, 
SUM(Month(date)=2) AND (YEAR(date)='2017') AS `Feb`, 
SUM(Month(date)=3) AND (YEAR(date)='2017') AS `Mar`, 
SUM(Month(date)=4) AND (YEAR(date)='2017') AS `Apr`, 
SUM(Month(date)=5) AND (YEAR(date)='2017') AS `May`, 
SUM(Month(date)=6) AND (YEAR(date)='2017') AS `Jun`, 
SUM(Month(date)=7) AND (YEAR(date)='2017') AS `Jul`, 
SUM(Month(date)=8) AND (YEAR(date)='2017') AS `Aug`, 
SUM(Month(date)=9) AND (YEAR(date)='2017') AS `Sep`, 
SUM(Month(date)=10) AND (YEAR(date)='2017') AS `Oct`, 
SUM(Month(date)=11) AND (YEAR(date)='2017') AS `Nov`, 
SUM(Month(date)=12) AND (YEAR(date)='2017') AS `Dec` 
from transaction 
GROUP BY YEAR(date) 

你可以试试上面的代码。

这里我只是在SUM函数中添加了条件。 如果Month(date)=1) AND (YEAR(date)='2017'条件为真,那么它将返回1,否则返回0.

因此最后它会为您提供预期的输出。

它会帮助你。

1

以下是通用查询。

SELECT COUNT(id), YEAR(created) as year, MONTH(created) as mon 
FROM transaction 
WHERE date IS NOT NULL 
GROUP BY YEAR(date), MONTH(date) Desc 

它会给你找到的所有月份的结果,以及你在代码中可以处理的错误。

相关问题