7
ID          Zip        Room
----------- ---------- ------
317         94087      S105
318         94087      L603
1739        94404-1801 L603
1823        94401-2129 L603
1824        94401-2129 L603
2135        94404-1801 L603
2268        95136-1459 S604
2269        95136-1459 S604
3704        92673-6417 L402
4479        93454-9670 L402
4480        93454-9670 L402
4782        92395-4681 L402
4783        92395-4681 L402
4852        92886-4411 L402
4853        92886-4411 L402
4959        92673-6417 L402
5153        91773-4028 L402
5202        91773-4028 L402
5211        91765-2959 L402
5212        91765-2959 L402
5388        92336-0605 L402
5392        92336-0605 L402
5727        92870      L402
5728        92870      L402
5831        92557      L402
5916        92557      L402

zip が同じで Room が異なる ID を選択するにはどうすればよいですか?

上の表では、結果を次のようにしたいと考えています。

ID          Zip        Room
----------- ---------- ------
317         94087      S105
318         94087      L603

SQL Server 2008 の使用

4

3 に答える 3

10

使用できますEXISTS

SELECT ID, Zip, Room 
FROM dbo.Table t1
WHERE EXISTS
(
   SELECT 1 FROM dbo.Table t2
   WHERE t2.Zip = t1.Zip
   AND t2.Room <> t1.Room
)
于 2012-10-26T20:05:53.260 に答える
5
select * 
from table t1 
join table t2 
  on t1.Zip = t2.Zip and t1.Room <> t2.Room
于 2012-10-26T20:07:09.553 に答える
0

ウィンドウ集計関数MIN()を使用して、それに応じて、あたりMAX()の最小値と最大値を取得し、それらの値が異なる行のみを選択できます。ここ:RoomZip

WITH MinMax AS (
  SELECT
    *,
    MinRoom = MIN(Room) OVER (PARTITION BY Zip),
    MaxRoom = MAX(Room) OVER (PARTITION BY Zip)
  FROM atable
)
SELECT
  ID,
  Zip,
  Room
FROM MinMax
WHERE MinRoom <> MaxRoom
;
于 2012-10-27T09:43:47.797 に答える