タイトル | : Re: 2つのシートの件数を求めたい |
記事No | : 16515 |
投稿日 | : 2019/12/24(Tue) 10:01 |
投稿者 | : 魔界の仮面弁士 |
前提条件が不足しているので、回答しにくいです。
今回はコードが '1111' しかありませんが、 複数のコードがあった場合にはどういう結果になるのでしょうか。
両方のテーブルに同じコードがあったにも関わらず、 それぞれの名前が合致しなかった場合はどういう動作を期待するのでしょうか。
> 1度のSQLで取得したいというものです。
何故 1 回でなければいけないのか、理由を知りたいところですが、それはさておき。
結合条件が明確になれば、一回の SELECT にまとめられそうですが、 現状は UNION 結合した副問い合わせを集計する形が手っ取り早いかも。
SELECT [コード], [仮名] AS [名前] , SUM([件数1]) AS [テーブル1件数] , SUM([件数2]) AS [テーブル2件数] FROM ( SELECT [コード], MIN([名前]) AS [仮名] , COUNT(*) AS [件数1] , NULL AS [件数2] FROM [テーブル1] GROUP BY [コード] UNION ALL SELECT [コード], MIN([名前]) AS [仮名] , NULL AS [件数1] , COUNT(*) AS [件数2] FROM [テーブル2] WHERE [データ] IS NOT NULL GROUP BY [コード] ) AS [表] GROUP BY [コード], [仮名]
UNION を使わずに、JOIN 構文で結合させる手も考えてみましたが、 細かい条件が曖昧なので、現状の情報だけだとカウントしにくいですね。
たとえば結果に「名前」フィールドがありますが、その元となる [テーブル1].[名前] と [テーブル2].[名前] の関係が現状不明瞭です。
同じコードがテーブル1に 3 件あって、テーブル2に 2 件あった場合、 CROSS JOIN だと 6 件、OUTER JOIN だと 3 件、INNER JOIN だと 2 件になるので 細かい除外条件を考えるよりは、個別にカウントして UNION 等でまとめた方が手っ取り早そうです。
|