0
テーブルのテーブルA
がフィールドidA_1-3
のテーブルB
にいくつ存在し、0を出力にnullで置き換えたいのですか? SQL別のテーブルの複数のフィールドをカウントする
A B
idA idB idA_1 idA_2 idA_3
1 1 2 3 3
2 2 2 3 3
3 3 1 3 2
4 3 1 2
5 1 1 2
は、所望の出力
:
idA cA_1 cA_2 cA_3
1 2 2
2 2 3
3 1 3 2
CA_1は、以下のように見えますが、私はより多くの列が含まれるようにそれを変更することができなかっただけカウントクエリ:
SELECT IdA, COUNT(*) AS cA_1 FROM
(SELECT A.IdA, B.IdB
FROM A LEFT JOIN B ON A.IdA = B.IdA_1)
WHERE IdB IS NOT NULL
GROUP BY IdA
UNION ALL SELECT IdA, NULL AS cA_1 FROM
(SELECT A.IdA, B.IdB
FROM A LEFT JOIN B ON A.IdA = B.IdA_1)
WHERE IdB IS NULL
GROUP BY IdA;
もオプションがありますIIF
となりますが、遅すぎます。
SELECT A.IdA, IIf((SELECT COUNT(*) FROM B WHERE IdA_1 = A.IdA)=0, NULL, (SELECT COUNT(*) FROM B WHERE IdA_1 = A.IdA)) AS cA_1
FROM A;
2番目の例の最初の選択で循環参照を避けるために、マイナーな修正(id - > idAとa_1-3 - > cA_1-3を変更する)のように動作します。 – user0