从选择中选择值

时间:2019-06-08 12:56:33

标签: sql

我做了一个简单的select语句,它采用了“优先级” = 1的每个“深度”。

select HOLEID, DEPTH, SURVTYPE from HOLESURVEY WHERE PRIORITY = 1

我想过滤结果,以便向我显示所有HOLEID,其中同一HOLEID的深度超过1。

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:1)

您可以这样做:

with 
x as (
  select HOLEID, DEPTH, SURVTYPE from HOLESURVEY WHERE PRIORITY = 1
)
select *
from x
where (HOLEID, DEPTH) in (
  select HOLEID, DEPTH
  from x
  group by HOLEID, DEPTH
  having count(*) > 1
)

答案 1 :(得分:1)

您需要group by HOLEID来获取适用于您的条件的所有ID:

SELECT * FROM HOLESURVEY
WHERE HOLEID IN (
  SELECT HOLEID
  FROM HOLESURVEY 
  WHERE PRIORITY = 1
  GROUP BY HOLEID
  HAVING COUNT(DISTINCT DEPTH) < COUNT(DEPTH)
)

如果您只需要孔:

SELECT HOLEID
FROM HOLESURVEY 
WHERE PRIORITY = 1
GROUP BY HOLEID
HAVING COUNT(DISTINCT DEPTH) < COUNT(DEPTH)

答案 2 :(得分:1)

使用聚合。我想你想要

select HOLEID, DEPTH
from HOLESURVEY 
where PRIORITY = 1
group by HOLEID, DEPTH
having COUNT(*) > 1;

您可以在COUNT(*)中包含SELECT,以显示给定孔有多少深度匹配。

答案 3 :(得分:0)

我想您需要多次具有相同孔洞和相同深度的记录。

    select HOLEID, DEPTH, count(*) recCounter from HOLESURVEY 
            group by HOLEID, DEPTH having count(*) > 1

,如果需要详细信息行,则

    SELECT * FROM HOLESURVEY a 
    inner join 
        (select HOLEID, DEPTH from HOLESURVEY 
            group by HOLEID, DEPTH having count(*) > 1) b
    on b.holeid = a.holeid and b.depth = a.depth