1

テーブルに 2 回表示されるレコードのみを照会するにはどうすればよいですか?

現在、私のテーブルは次のようになっています。

Number   Date                  RecordT     ReadLoc
123      08/13/13 1:00pm       N           Gone
123      08/13/13 2:00pm       P           Home
123      08/13/13 3:00pm       N           Away
123      08/13/13 4:00pm       N           Away

RecordT フィールドに同じ「値」があり、ReadLoc フィールドに同じ「値」があるレコードを選択するクエリが必要です。

したがって、上記の結果は次のクエリで表示されます。

Number   Date                  RecordT     ReadLoc
123      08/13/13 3:00pm       N           Away
123      08/13/13 4:00pm       N           Away

私はこのような副選択をしようとしていました:

SELECT t.Number, t.Date, n.RecordT, n.ReadLoc
FROM Table1 t join Table2 n ON t.Number = n.Number
WHERE t.Number IN (SELECT t.Number FROM Table1 GROUP BY t.Number HAVING COUNT(t.Number) > 1 )
AND n.ReadLoc IN (SELECT n.ReadLoc FROM Table2 GROUP n.ReadLoc HAVING COUNT(n.ReadLoc) > 1 )
4

3 に答える 3

3
SELECT a.*
FROM Table1 a
JOIN (SELECT RecordT, ReadLoc
      FROM Table1
      GROUP BY RecordT, ReadLoc
      HAVING COUNT(*) > 1
      )b
ON a.RecordT = b.RecordT
 AND a.ReadLoc = b.ReadLoc

SQL フィドル

于 2013-08-15T20:31:36.583 に答える
2

これはうまくいかないはずです:

select * 
from table1 
where (RecordT, ReadLoc) in 
   (select RecordT, ReadLoc 
    from table1 
    group by RecordT, ReadLoc 
    having count(*) > 1)
于 2013-08-15T20:25:04.593 に答える
1

以下をベースとして使用できます。

;with cte as (
    select *, cnt = count(1) over (partition by RecordT, ReadLoc)
    from TableName
)
select *
from cte
where cnt > 1

あなたTableNameが実際に2つの結合されたテーブルのビューである場合は、試してください:

;with TableName as (
    SELECT t.Number, t.Date, n.RecordT, n.ReadLoc
    FROM Table1 t
        join Table2 n ON t.Number = n.Number
),
cte as (
    select Number, Date, RecordT, ReadLoc,
        cnt = count(1) over (partition by RecordT, ReadLoc)
    from TableName
)
select Number, Date, RecordT, ReadLoc
from cte
where cnt > 1 /* and RecordT='N' and ReadLoc='AWAY' */
于 2013-08-15T20:21:23.947 に答える