如何创建查询以从表中提取值

时间:2019-01-07 10:50:59

标签: sql oracle plsql

我有一个oracle表,我想从我的表列中提取一个值

id|document_number|container_id|state|
--|---------------|------------|-----|
1 |CC330589       |356         | 40  |
--------------------------------------
1 |CC330589       |null        | 99  |
-------------------------------------

我想创建一个查询,提取document_number为356且状态为'CC330589'的container_id(值99)。

在我的情况下,我需要值356(而不是null值)。

任何想法如何创建查询?预先感谢。

3 个答案:

答案 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

同样,这将从样本数据中产生指定的结果,但可能与您的真实数据集有误。