我做了一个简单的select语句,它采用了“优先级” = 1的每个“深度”。
select HOLEID, DEPTH, SURVTYPE from HOLESURVEY WHERE PRIORITY = 1
我想过滤结果,以便向我显示所有HOLEID,其中同一HOLEID的深度超过1。
有人可以帮助我吗?
答案 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