-1

あるテーブルから特定のレコード/フィールドを選択し、それを別のテーブルに結合して、対応するカウントの列を含めるスクリプトを作成する方法を理解しようとしています。たとえば、これは私が今持っているものです:

select ID, Val from OriginalTable where Something = 1

これで、この元のテーブルにリンクしているレコードを持つ別のテーブルがあります。ここで、列はのとOriginalID一致しIDますOriginalTable。1つの例は次のとおりです。

select * from OtherTable where OriginalID = 3

...ここで、3=IDOriginalTable

私がやりたいのは、最初のステートメントに列を追加して、2番目のクエリに示されている他のテーブルの数を表示することです。たとえば、これは結果セットの場合があります。

ID    Val    Count
1     abc    15
2     def    23
3     ghi    42
4     jkl    19

このカウントを含めるようにこのクエリを作成するにはどうすればよいですか?

4

4 に答える 4

2

これを行う方法はたくさんありますが、どちらを使用することもできますGroup By

select ID, Val, [Count] = count(1)
from OriginalTable be
left join OtherTable ot on be.OriginalID = ot.OriginalID
where Something = 1
group by ID,Val

またはあなたは使用することができOVERますPartition By

select ID, Val, [Count] = count(1) OVER(PARTITION BY ID,Val)
from OriginalTable be
left join OtherTable ot on be.OriginalID = ot.OriginalID
where Something = 1

OVER個人的にはこの方法が好きです。ここにMSDNに関する情報があります。

于 2012-08-14T15:28:00.667 に答える
2

サブクエリはそれを処理する必要があります。

SELECT 
  ID, Val, Cnt
FROM OriginalTable
JOIN (
  SELECT 
    OriginalID, COUNT(*) AS Cnt
  FROM OtherTable
  GROUP BY OriginalID
  ) AS Sub ON ID=OriginalID
于 2012-08-14T15:29:39.010 に答える
1
;WITH ot(ID, c) AS 
(
  SELECT OriginalID, COUNT(*)
   FROM dbo.OtherTable
   GROUP BY OriginalID
)
SELECT t.ID, t.Val, [Count] = COALESCE(ot.c, 0)
  FROM dbo.OriginalTable AS t
  LEFT OUTER JOIN ot
  ON t.ID = ot.ID
  WHERE t.Something = 1;
于 2012-08-14T15:28:11.520 に答える
1
SELECT be.ID, be.Val, Count(*) AS [Count]
FROM OriginalTable be
LEFT OUTER JOIN OtherTable ot ON be.ID = ot.OriginalID
WHERE be.Something = 1
GROUP BY be.ID, be.Val
于 2012-08-14T15:29:12.860 に答える