5

假设我有这样的输入:

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

我想检索第二列中同时包含 0080 和 0010 数据的第一列的所有行。结果将是这样的:

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

从结果中我们可以看到第一列不包括 25,因为 25 在第二列中只有 0010,对于 34 在第二列中只有 0080 也是如此。

我尝试使用嵌套查询,但它变得非常慢,因为我的表非常大(包含大约 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 first
from t
where second in ('0080', '0010')
group by first
having count(distinct second) = 2
于 2012-10-17T16:21:05.713 回答
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 回答