2

ケースが表示される回数を比較したいデータベースが 2 つあります。

TAB1:

ID     Sequence
A2D    1
A2D    2
A2D    3
A3D    1

タブ 2:

ID     Sequence
A2D    1
A2D    2
A3D    1
A3D    2

さて、この例では、次の結果を得ようとしています。

ID     Table1       Table2
A2D    3            2
A3D    1            2

これらのコードを試してみましたが、成功しませんでした:

SELECT R1.ID as ID, COUNT(R1.ID) as Table1, 
COUNT(R2.ID) as Table2
FROM TAB1 AS R1, TAB2 AS R2
WHERE R1.ID = R2.ID
GROUP BY R1.ID

これは私に間違ったカウント値を与えました...

また、これは単純にクラッシュします:

select 
    ( 
     select count(*) as Table1
     from TAB1
     where ID = R1.ID
    ),(
      select count(*) as Table2
      from TAB2
      where ID= R1.ID
     )
FROM TAB1 AS R1

ご覧のとおり、私は自分の基準を動的にしようとしています。私が見つけたほとんどの例は、基本的なハードコーディングされた基準を含んでいました。しかし、私の場合、クエリで最初のテーブル ID を調べ、それが表示される時間をカウントし、同じ ID を持つ 2 番目のテーブルに対してそれを実行してから、次の ID に移動するようにします。

私の質問に情報が不足していたり​​、わかりにくい場合は、私に聞いてください。より正確になるよう最善を尽くします。

前もって感謝します !

4

4 に答える 4

0

目的の結果を得るために、2 つのサブクエリ (R1SQ と R2SQ) とメインの UNION クエリ (両方のテーブルに表示されない行を含むすべての行エントリを含めるために、内部、左、および右の結合を使用する R1R2) に分割しました。 :

R1SQ

SELECT R1.Builder, Count(R1.Builder) AS Table1
FROM R1
GROUP BY R1.Builder;

R2SQ

SELECT R2.Builder_E, Count(R2.Builder_E) AS Table2
FROM R2
GROUP BY R2.Builder_E;

R1R2

SELECT R1SQ.Builder, R1SQ.Table1, R2SQ.Table2
FROM R1SQ INNER JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
UNION
SELECT R1SQ.Builder, R1SQ.Table1, 0 AS Table2
FROM R1SQ LEFT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
WHERE (((R2SQ.Builder_E) Is Null))
UNION
SELECT R2SQ.Builder_E, 0 AS Table1, R2SQ.Table2
FROM R1SQ RIGHT JOIN R2SQ ON R1SQ.Builder = R2SQ.Builder_E
WHERE (((R1SQ.Builder) Is Null))
ORDER BY R1SQ.Builder;
于 2012-10-31T20:59:32.187 に答える
0

ここではサブクエリとして UNION ALL を使用しています

SELECT ID, SUM(T1) AS Table1, SUM(T2) AS Table2
FROM
    (SELECT ID, COUNT(ID) AS T1,         0 AS T2 FROM TAB1 GROUP BY ID
     UNION ALL
     SELECT ID,         0 AS T1, COUNT(ID) AS T2 FROM TAB2 GROUP BY ID)
GROUP BY ID
HAVING SUM(T1)>0 AND SUM(T2)>0
于 2012-10-31T20:22:59.763 に答える
0

あなたの質問を理解できるかどうかわかりませんが、次のようなことを試すことができます。

SELECT DISTINCT t.ID, 
       (SELECT COUNT(ID) FROM R1 WHERE ID = t.ID) AS table1,
       (SELECT COUNT(ID) FROM R2 WHERE ID = t.ID) AS table2
FROM table1 t
于 2012-10-31T20:30:14.463 に答える
0

私は別のアプローチを使用しましたが、残念ながら 2 つのクエリを使用する必要があります。それらを組み合わせることができるかどうかはまだわかりません。最初のものは、両方のテーブルの合計を作成し、結果を結合するためのものです。

SELECT "Tab1" AS [Table], Tab1.ID, Count(*) AS Total
FROM Tab1
GROUP BY "Tab1", Tab1.ID
UNION SELECT "Tab2" AS [Table], Tab2.ID, Count(*) AS Total
FROM Tab2
GROUP BY "Tab2", Tab2.ID

また、Access はピボット クエリをサポートしているため、次のように使用できます。

TRANSFORM Sum(qrySums.[Total]) AS Total
SELECT qrySums.[ID]
FROM qrySums
GROUP BY qrySums.[ID]
PIVOT qrySums.[Table];
于 2012-10-31T20:35:22.383 に答える