2017-08-29 51 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 

它會給你找到的所有月份的結果,以及你在代碼中可以處理的錯誤。

相關問題