2015-04-30 38 views
1

我有下列的表:的Oracle SQL查詢沒有顯示正確的價值

  • ID
  • 技術
  • name_event
  • time_event

我算的數表中的值用以下查詢

select 1, 'Folder' as "Technology", 'Status' as "Name_Event", count(dm1.id) as "number of items", max(TO_CHAR(TO_DATE('20000101','yyyymmdd')+(SYSDATE - dm1.time_event),'hh24:mi:ss')) as "Time in system" 
    from db dm1 join db dm2 on dm1.id = dm2.id 
    where dm1.technology = 'Folder' and dm1.name_event = 'status1' and NOT EXISTS(SELECT 1 FROM db dm2 WHERE dm2.name_event = 'status2' and dm2.id = dm1.id) 

我以下插入

INSERT INTO DB(id, technology, name_event, time_event) VALUES(1,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(2,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(3,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(4,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(5,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(6,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(7,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(8,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(9,'Folder', 'status1', 01:00:00); 
    INSERT INTO DB(id, technology, name_event, time_event) VALUES(10,'Folder', 'status1', 01:00:00); 
INSERT INTO DB(id, technology, name_event, time_event) VALUES(4,'Folder', 'status2', 02:00:00); 
INSERT INTO DB(id, technology, name_event, time_event) VALUES(1,'Folder', 'status2', 03:00:00); 

我在狀態1插入的10行和移動2至狀態2,所以應該有狀態1 8項時我執行查詢,但結果是10。 ..

我在做什麼錯?

+1

如何提供這些10插入語句以及創建表腳本? –

+1

除非我們有你的樣本數據,否則我們很難看到你做錯了什麼 - 你能添加表格定義和插入語句嗎? – ninesided

+0

可否請您在表格中提供一些示例數據,然後我們可以更快地提供答案 –

回答

1

在您的查詢,你是join荷蘭國際集團dm2但隨後使用NOT EXISTS相關子查詢(和使用子查詢中相同的別名)。我無法用我的設置複製這個問題,但這肯定會讓一些東西混淆!所以嘗試沒有第二個數據庫的副本,並保持NOT EXISTS

select 1, 'Folder' as "Technology", 'Status' as "Name_Event", count(dm1.id) as "number of items", max(TO_CHAR(TO_DATE('20000101','yyyymmdd')+(SYSDATE - dm1.time_event),'hh24:mi:ss')) as "Time in system" 
from db dm1 
where dm1.technology = 'Folder' and dm1.name_event = 'status1' and NOT EXISTS(SELECT 1 FROM db dm2 WHERE dm2.name_event = 'status2' and dm2.id = dm1.id) 
+0

我編輯它,但仍然是相同的問題.. – Jonas

+0

如果你從db dm1 做'SELECT COUNT(*),你會得到什麼,其中dm1.technology ='Folder'和dm1.name_event ='status1''?或者做一個'SELECT * FROM ...' - 看起來其他人有同樣的難度重新創建,這可能會暗示你的數據有趣的事情 – Captain

+0

至少現在你的代碼工作了,我不知道爲什麼它沒有首先,也許是需要進行的承諾。謝謝! – Jonas

0

您在表中使用了2個以上的插入,所以現在您有10 + 2共12個插入,要移動數據,請使用update語句。

update db set name_event='status2' where id=4; 
update db set name_event='status4' where id=1; 
+0

我不能使用更新,因爲我需要保留我的原始行;-) – Jonas

+0

@Guil,你能詳細說明你的需求嗎?如果保留原始行,則最終將包含數據,id爲重複項,否則您可以保留觸發器並將數據移動到另一個將保存舊數據的表中,並且此表將反映新的更改 – anudeepks

+0

我的要求我是在狀態更改發生時插入的。 之後,我做了很多分析,因爲它是一個監控表。 使用重複表很愚蠢,因爲在實踐中有超過10個州,但我簡化了我的問題。 – Jonas