0

ユニオンクエリでカウントを行ったことはなく、正しく実行する際に問題が発生しています。

次のクエリを実行しています。

SELECT *
FROM
   (
      SELECT vg.vertrekluchthaven AS code, count(*) as countv
      FROM tbl_vluchtgegevens vg
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.vertrekluchthaven

    UNION  

      SELECT vg.aankomstluchthaven AS code, count(*) as counta
      FROM tbl_vluchtgegevens vg  
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.aankomstluchthaven
   ) vg

INNER JOIN tbl_luchthaven lh
ON  lh.luchthavenID = vg.code
GROUP BY vg.code
ORDER BY lh.luchthavencode;

最終的に、各ユニオン クエリにある各コードのカウントを取得する方法を見つけようとしています。コードを実行すると、countv のカウントが得られますが、counta はまったく得られません。

これは私が取得しようとしているものです:

+-------+-----------+-----------+-----------+  
| CODE  |   Name    | count v   | count a   |  
+-------+-----------+-----------+-----------+  
| AMS   | LONG NAME |     5     |     8     |  
| MSP   | LONG NAME |     5     |     2     |   
| WAS   | LONG NAME |     2     |     0     | 
+-------+-----------+-----------+-----------+
4

2 に答える 2

0

ユニオン クエリの結果を「tbl_luchthaven」と結合しています。そこにコードのいずれかのレコードがない可能性があるため、最終結果セットに特定のコードの行が表示されません。

于 2013-09-14T06:16:08.310 に答える
0

2 つのカウントを異なる列に配置する必要があるため、グループ化するときにそれらを別々に保つことができます。次にMAX()、それぞれのゼロ以外のカウントを取得するために使用します。

SELECT code, name, MAX(countv) countv, MAX(counta) counta
FROM (
      SELECT vg.vertrekluchthaven AS code, count(*) as countv, 0 as counta
      FROM tbl_vluchtgegevens vg
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.vertrekluchthaven

    UNION  

      SELECT vg.aankomstluchthaven AS code, 0 as countv, count(*) as counta
      FROM tbl_vluchtgegevens vg  
      WHERE vg.vertrekdatum2 <=NOW()
      GROUP BY vg.aankomstluchthaven
   ) vg

INNER JOIN tbl_luchthaven lh
ON  lh.luchthavenID = vg.code
GROUP BY vg.code
ORDER BY lh.luchthavencode;
于 2013-09-14T06:08:02.180 に答える