2016-11-21 22 views
1

私はSQL Developerの(emp表)で、この結果を取得しようとしています:COUNT(*)を返します(行数 - 1)SQL Developerの中(ORACLE)

TOTAL  1980  1981  1982  1983 
-------- --------- --------- --------- --------- 
14   1  10   2  1 

を私は取得しています:

をテーブル全体を頼りに
TOTAL  1980  1981  1982  1983 
-------- --------- --------- --------- --------- 
13   1  10   2  1 

は私に14を与える:

SELECT COUNT(*) FROM EMP; 

は、なぜ、この場合のカウントは13ない14を返すのですか?

SELECT COUNT(*) TOTAL, 
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1980,COUNT(*))) "1980", 
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1981,COUNT(*))) "1981", 
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1982,COUNT(*))) "1982", 
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1983,COUNT(*))) "1983" 
FROM EMP GROUP BY HIREDATE; 

答えて

0

私はあなたが条件付きの集約をしたいと思う:

SELECT COUNT(*) TOTAL, 
     SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1980 THEN 1 ELSE 0 END) as "1980", 
     SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1981 THEN 1 ELSE 0 END) as "198`", 
     SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1982 THEN 1 ELSE 0 END) as "1982", 
     SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1983 THEN 1 ELSE 0 END) as "1983" 
FROM EMP; 

注:

  • GROUP BY HIREDATEする必要はありません。 1行の出力だけが必要なようです。
  • DECODE()は、Oracle固有です。条件式のANSI標準はCASEです。
  • ネストされた集計関数(COUNT(*)内にSUM())があります。これがあなたの問題の原因です。このバージョンで問題を解決する必要があります。
関連する問題