2016-02-24 105 views
-1

這裏是我的表,我失去了超:甲骨文命令迄今爲止

 Command 
noCommand date  numberClient 
1   01/06/2000 10 
3   02/06/2000 10 


     Details 
noLivre noCommand 
100  1 
100  1 
101  1 
100  3 
103  1 


Delivered 
noLivre Date 
100  03/06/2000 
101  04/06/2000 
103  05/06/2000 

我要的是所有的noLivre從細節觸摸在通過客戶端沒有10 2000年6月作出的所有命令

所以我應該得到的回報:

noLivre 
100 

而且我超卡住任何幫助嗎?

編輯:我認爲Delivered表只是在這裏搞砸了,我們可能不需要它。

我有什麼權利現在不工作...

SELECT d.noLive 
FROM Detail d 
INNER JOIN Command c 
ON c.noCommand = d.noCommand 
WHERE c.date BETWEEN '01/06/2000' AND '30/06/2000' AND c.numberClient = 10 
/

結果:

noLivre 
100 
100 
103 
101 
100 
+0

爲什麼這個結果是錯的?客戶端10的命令表中包含1和3的條目;這些命令在2000年6月份出現在你的詳細信息表中,分別爲100,101和103.你爲什麼只希望看到100? –

+0

因爲命令103和101只在一個沒有命令,但在所有的命令100聯繫,我只想要noLivre,其中在所有noCommand不noLivre觸摸知道IM清晰的英語不是我的第一語言 – dopeinc

+0

「那一抹所有命令「令人困惑;你的意思是「擁有所有的命令」,我想呢?所以應該包括100,因爲它有1和3;其他人不包括,因爲他們只有1? –

回答

1

你需要連接表得到你想要的結果:

SELECT d.noLivre 
    FROM DETAILS d 
    INNER JOIN COMMAND c 
    ON c.noCommand = d.noCommand 
    WHERE c.Date BETWEEN TO_DATE('01-JUN-2000 00:00:00', 'DD-MON-YYYY HH24:MI:SS') 
        AND TO_DATE('30-JUN-2000 23:59:59', 'DD-MON-YYYY HH24:MI:SS') AND 
     c.numberClient = 10; 

祝你好運。

+0

如果我的日期格式爲DD/MM/YYYY那麼我想它應該是:WHERE c.dateCommande BETWEEN TO_DATE('01/JUN/2000' , 'DD/MM/YYYY') 和TO_DATE('30/JUN/2000','DD/MM/YYYY')和 c.noClient = 10 – dopeinc

+0

現在編輯代碼 – dopeinc

0

你可以指望的命令的數量每個noLivre有詳細表,並比較,與有在命令表中的客戶端的命令數。

select d.noLivre 
from (
    select c.*, count(c.noCommand) over (partition by c.numberClient) as cntCommands 
    from Command c 
) c 
join Detail d on d.noCommand = c.noCommand 
where c.numberClient = 10 
and c.dtCommand >= date '2000-06-01' and c.dtCommand < date '2000-07-01' 
group by d.noLivre, c.cntCommands 
having count(distinct d.noCommand) = c.cntCommands; 

    NOLIVRE 
---------- 
     100 

我正在使用內聯視圖和分析計數的命令;與您的數據顯示,獲得cntCommands爲2客戶端10.我已經numberClient的情況下,分區要使用同樣的方法查找具有所有的命令,例如所有的客戶端;否則nuberClient過濾器也可以在內聯視圖中。

然後將內嵌視圖連接到詳細信息表,並且還計算該表中不同命令的數量。最後,它被分組,並且having子句將內聯視圖(2)中的命令總數與詳細信息表中的實際命令數進行比較。只有100有1和3,所以它的數量是2 - 並匹配 - 而101和103只有1 - 所以不匹配。