5

次のような入力があるとします。

1st column ---------2nd column
23 ---------------------- 0080
23 ---------------------- 0010
23 ---------------------- 0080
25 ---------------------- 0010
25 ---------------------- 0010
34 ---------------------- 0080
27 ---------------------- 0010
27 ---------------------- 0080

2 列目に 0080 と 0010 の両方のデータがある 1 列目のすべての行を取得したいと考えています。結果は次のようになります。

1st column--------- 2nd column
23 ---------------------- 0080
23 ---------------------- 0010
23 ---------------------- 0080
27 ---------------------- 0010
27 ---------------------- 0080

結果から、25 は 2 列目に 0010 しかないため、1 列目には 25 が含まれていないことがわかります。2 列目には 0080 しかない 34 も同じです。

ネストされたクエリを使用してみましたが、テーブルが非常に大きい (約 30,000 行以上含まれている) ため、非常に遅くなります。大きなデータテーブルでより高速なスマートな手法を探しています。

4

3 に答える 3

4
select * from your_table
where col1 in 
(
   select col1
   from your_table
   where col2 in ('0080', '0010')
   group by col1
   having count(distinct col2) = 2
)
于 2012-10-17T16:20:19.230 に答える
0
SELECT t.Col1,t.Col2
  FROM dbo.YourTable t
  JOIN(
    SELECT Col1, 
        MAX(CASE WHEN Col2 = '0010' THEN 1 ELSE 0 END) Has0010,
        MAX(CASE WHEN Col2 = '0080' THEN 1 ELSE 0 END) Has0080
      FROM dbo.YourTable
      GROUP BY Col1
  )FilterTbl f
  ON t.Col1 = f.Col1 AND f.Has0010 = 1 AND f.Has0080 = 1
于 2012-10-17T16:23:48.847 に答える
0
select first
from t
where second in ('0080', '0010')
group by first
having count(distinct second) = 2
于 2012-10-17T16:21:05.713 に答える