我有一个oracle表,我想从我的表列中提取一个值
id|document_number|container_id|state|
--|---------------|------------|-----|
1 |CC330589 |356 | 40 |
--------------------------------------
1 |CC330589 |null | 99 |
-------------------------------------
我想创建一个查询,提取document_number为356
且状态为'CC330589'
的container_id(值99
)。
在我的情况下,我需要值356
(而不是null
值)。
任何想法如何创建查询?预先感谢。
答案 0 :(得分:1)
您可以在下面尝试-
select * from tablename A
inner join
(select document_number, min(container_id ) from tablename group by document_number)B
on A.document_number=B.document_number
where A.document_number='CC330589' and state=99
答案 1 :(得分:1)
您可以为给定文档使用fid所有非空值,并使用EXISTS
确保给定文档存在状态99:
SELECT *
FROM t
WHERE document_number = 'CC330589'
AND container_id IS NOT NULL
AND EXISTS (
SELECT 1
FROM t AS x
WHERE document_number = t.document_number
AND state = 99
)
答案 2 :(得分:1)
这将从样本数据中获取您指定的结果集。是否正确的解决方案取决于您未指定的业务规则:
select document_number
, max(container_id) as container_id
, max(state) as state
from your_table
group by document_number
这是另一种解决方案
select t1.document_number
, coalesce(t1.container_id, t2.container_id) as container_id
, t1.state as state
from your_table t1
join your_table t2
on t1.document_number = t2.document_number
where t1.state = 99
and t1.document_number = 'CC330589'
and t2.state != 99
同样,这将从样本数据中产生指定的结果,但可能与您的真实数据集有误。