0

OK..これが私がやりたいことです。以下の例を単純化しすぎています:-

次のような参照を持つテーブル(Table1)があります。

Table1_ID(PK)

Table1_ID説明

別の表があります(表2):-

Table2_ID(PK)

Table2_LinkedID(FK)

Table2_Status<-値は「オープン」または「完了」です

Table2_LinkedIDはTable1_IDにリンクされています。

Ok。今、私は一緒に接続したい3つのクエリがあります。これが私が必要なものです。

最初のクエリ:-

SELECT * FROM Table1

これは正常に機能します。

クエリに2つの列を追加したいと思います。1つ目は、外部キーがtable1の主キー(つまりSELECT *)と等しいTable2のレコードの総数です。

2番目は、Table2_Status='completed'であるレコードの数になります

これは意味がありますか?

4

4 に答える 4

2
select t1.Table1_ID, 
    t1.Table1_Description, 
    t2.TotalCount, 
    t2.CompletedCount
from Table1 t1
left outer join (
    select Table2_LinkedID, 
        count(*) as TotalCount,
        count(case when Table2_Status = 'completed' then 1 end) as CompletedCount
    from Table2
    group by Table2_LinkedID
) t2 on t1.Table1_ID = t2.Table2_LinkedID
于 2012-09-10T19:50:04.450 に答える
1

GROUP BY集計を使用して単純にすることができます。

SELECT 
Table1.ID, 
Table1.Description,
Count(Table2.ID) AS TotalT2,
Sum(CASE WHEN Table2.Status = 'completed' THEN 1 ELSE 0 END) AS CountOfCompleted
FROM Table1
LEFT JOIN Table2 ON Table2.LinkedID = Table1.ID
GROUP BY Table1.ID, Table1.Description
于 2012-09-10T19:56:31.207 に答える
1
SELECT t1.*,
(SELECT COUNT(*) FROM Table2 WHERE Table2_LinkedID = t1.ID) cntTotal,
(SELECT COUNT(*) FROM Table2 WHERE Table2_LinkedID = t1.ID AND Table2_Status = 'completed') cntCompleted
FROM Table1 t1

Table2_Status外部キーと最高のパフォーマンスを得るために、適切なインデックスを用意してください。

于 2012-09-10T19:50:20.000 に答える
0

これはあなたのために働きますか?

クエリ1:

select a.ID
        , count(1) as Table2_RecordCount
from Table1 a
inner join Table2 b on b.LinkedID = a.ID
group by a.ID

クエリ2:

select a.ID
        , count(1) as Table2_RecordCount
from Table1 a
inner join Table2 b on b.LinkedID = a.ID
where b.[Status] = 'completed'
group by a.ID
于 2012-09-10T20:37:45.893 に答える