0

这是我的表数据,我想通过比较多行从中找到特定的 id..

onetsoc_code    element_id   data_value

11-1011.00      1.B.1.a      1.33
11-1011.00      1.B.1.b      2.00
11-1011.00      1.B.1.c      2.67
11-1011.00      1.B.1.d      3.67
11-1011.00      1.B.1.e      7.00
11-1011.00      1.B.1.f      5.33
11-1011.00      1.B.1.g      5.00
11-1011.00      1.B.1.h      6.00
11-1011.00      1.B.1.i      0.00
11-1021.00      1.B.1.a      1.33
11-1021.00      1.B.1.b      1.33
11-1021.00      1.B.1.c      1.00
11-1021.00      1.B.1.d      3.33
11-1021.00      1.B.1.e      7.00
11-1021.00      1.B.1.f      3.67
11-1021.00      1.B.1.g      5.00
11-1021.00      1.B.1.h      6.00
11-1021.00      1.B.1.i      4.00
11-1031.00      1.B.1.a      1.00
11-1031.00      1.B.1.b      3.67
11-1031.00      1.B.1.c      3.67
11-1031.00      1.B.1.d      4.67
11-1031.00      1.B.1.e      7.00

这是我的表,所以我想要那些onetsoc_code

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00

如果您查看表格,您会发现11-1021.00是我想要的结果。

所以这就是我希望你得到 1.B.1.a 到 1.B.1.f 的逻辑。我只想一次比较三行,并且想要与这些数据关联的单个onetsoc_code 。

具有 1.B.1.g、1.B.1.h、1.B.1.i 的行可用于所有onetsoc_code,所以我只需要那些具有上述给定条件的onetsoc_code,就像再次一样,

1.B.1.g      5.00
1.B.1.h      6.00
1.B.1.i      4.00
4

1 回答 1

2

您可以onetsoc_code对包含三个DISTINCT记录的组进行分组和过滤:

SELECT   onetsoc_code
FROM     mytable
WHERE    (element_id = '1.B.1.g' AND data_value = 5.00)
      OR (element_id = '1.B.1.h' AND data_value = 6.00)
      OR (element_id = '1.B.1.i' AND data_value = 4.00)
GROUP BY onetsoc_code
HAVING   COUNT(DISTINCT element_id, data_value) = 3

sqlfiddle上查看。

当然,如果保证唯一性,则可以节省DISTINCT操作费用,而只需使用普通旧的COUNT(*)

于 2012-07-22T10:34:52.703 回答