簡體   English   中英

從Oracle表中得出具有多個條件的結果

[英]Concetating results from Oracle table with several criterias

這是困難的一個。 我已經讀過關於如何從表中的多個行合並值的信息,但找不到關於如何處理擺在我面前的任務集的任何信息。 我不是一個Oracle專家,直到現在只進行了簡單的選擇查詢,所以我在這里很茫然。

在一個包含實驗室結果的巨大的oracle數據庫表(幾億行)中,我需要選擇滿足特定條件的特定請購信息。

准則:對於相同的需求編號,必須在分析AB和C中提供答案,如果存在,則應選擇分析X,Y或Z的任何答案實例

表內容:

ReqNo   Ana Answer
1       A   7
1       B   14
1       C   18
1       X   250
2       A   8
2       X   35
2       Y   125
3       A   8
3       B   16
3       C   20
3       Z   100
4       X   115
4       Y   355
5       A   6
5       B   15
5       C   22
5       X   300
5       Y   108
5       C   88

所需結果:

ReqNo   A   B   C   X   Y   Z
1      7    14  18  250     
3      8    16  20          100
5      6    15  22  300 108 88

忽略了要求2和4,因為它們不符合A / B / C標准。

那有可能嗎?

您可以首先過濾所有3個記錄(A,B和C),然后使用PIVOT將它們轉換為滿足條件的列。

with req
AS
 (
   select reqno from t where ana IN ('A','B','C') 
    GROUP BY reqno HAVING
   count(DISTINCT  ana) = 3
 )
select * FROM
(
  select * from t where 
    exists ( select 1 from req r where t.reqno = r.reqno )
 )
    PIVOT(
          min(answer) for ana in ('A' as A, 'B' as B, 'C' as C,
                                  'X' as X, 'Y' as Y, 'Z' as Z)
           ) ORDER BY reqno;

演示版

我只會使用條件聚合:

select reqno,
       max(case when Ana = 'A' then Answer end) as a,
       max(case when Ana = 'B' then Answer end) as b,
       max(case when Ana = 'C' then Answer end) as c,
       max(case when Ana = 'X' then Answer end) as x,
       max(case when Ana = 'Y' then Answer end) as y,
       max(case when Ana = 'Z' then Answer end) as z
from t
group by reqno
having sum(case when Ana = 'A' then 1 else 0 end) > 0 and
       sum(case when Ana = 'B' then 1 else 0 end) > 0 and
       sum(case when Ana = 'C' then 1 else 0 end) > 0 ;

既然你似乎並不有重復,可以簡化having到:

having sum(case when Ana in ('A', 'B', 'C') then 1 else 0 end) = 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM