1

ここでの問題は、既存のクエリを変更していて、クエリで count(*) を使用できないことです。内部結合サブクエリを使用する必要があります。

内部結合に「変換」する必要があるのは次のようなものです(これは機能します):

SELECT count(distinct t1.id)
FROM table1 t1
WHERE t1.column1 = 'value1' AND
      t2.column2 = 'value2' AND
      EXISTS(select 1 from table2 t2 where t2.id = t1.id)

私のグローバルクエリは次のようになります。

SELECT [many many column]
FROM table2 t2
INNER JOIN [...]
LEFT OUTER JOIN [...]
--[I NEED MY COUNT HERE, see below for example]
WHERE [some conditions are true]
ORDER BY [some column]

私が私を助けるために見つけたのは、次のようなものです:

SELECT [many many column], myJoin.Count
FROM table2 t2
INNER JOIN (
    SELECT tt2.id, count(distinct tt2.id) as Count
    FROM table2 tt2
    WHERE EXISTS (SELECT 1 FROM table1 tt1 where tt1.id = tt2.id)
    GROUP BY tt2.id) myJoin 
on t2.id = myJoin.id;

私が達成しようとしていることがわかりますか?2 つのテーブルを結合して ID をカウントする必要がありますが、メイン クエリにカウントを含めることはできません。それに伴うすべての「グループ化」条件をコピー アンド ペーストすることはできません。 SQLサーバー上。

答えが見つかったら、戻ってきて投稿します。これに関するアドバイス/トリックをありがとう。

4

2 に答える 2

0

私はこれに出くわしました:

select count(distinct t1.id) over (partition by t1.aColumn) as myCount,
       [many many column]
from table2 t2
inner join table1 t1 on [someConditions] = value1 and
                        [someConditions] = value2 and 
                        t2.id = t1.id;

質問に投稿した最初の選択と同じ結果が得られますが、「グループ化」をどこにも追加せず、あまり慣れていない多くの内部結合もありません。私はこの解決策に固執するつもりです。ありがとう!

于 2013-10-18T13:45:57.210 に答える