我知道計算器會幫助我除了知道什麼是「最喜歡的編程動畫片」:P甲骨文加入(左外,右等:S)
這是公認的答案是: Bill Karwin
感謝所有的幫助(我想你加倍投全部)
我查詢弄成這個樣子(這是真實的)
SELECT
accepted.folio,
COALESCE(inprog.activityin, accepted.activityin) as activityin,
inprog.participantin,
accepted.completiondate
FROM performance accepted
LEFT OUTER JOIN performance inprog
ON(accepted.folio = inprog.folio
AND inprog.ACTIVITYIN
IN (4, 435) -- both are ids for inprogress
AND inprog.PARTICIPANTIN != 1 ) -- Ignore the "bot" participant
LEFT OUTER JOIN performance closed
ON(accepted.folio = closed.folio
AND closed.ACTIVITYIN IN (10,436, 4, 430 )) -- all these are closed or cancelled
WHERE accepted.ACTIVITYIN IN (3, 429) --- both are id for new
AND accepted.folio IS NOT NULL
AND closed.folio IS NULL;
現在我只需要與其他表格一起閱讀一份可讀的報告。
原帖
你好。
我掙扎了6個小時左右。現在有一個DB查詢(我很長一段時間的剋星)
我有像一些字段的數據表:
table performance(
identifier varchar,
activity number,
participant number,
closedate date,
)
它是用來保持門票
歷史標識符的軌道:是客戶ID喜歡(NAF0000001)
活動:是這裏的門票是FK(新,IN_PROGRESS,拒絕,關閉等)
參與者:是誰在這一點上票
參加closedate的FK:是當活動結束的日期。
編輯:我應該說「completiondate」而不是closedate。這是活動完成的日期,當票證關閉時不需要。
例如一個典型的歷史可以是這樣的:
identifier|activity|participant|closedate ------------------------------------------- NA00000001| 1| 1|2008/10/08 15:00| ------------------------------------------- NA00000001| 2| 2|2008/10/08 15:20| ------------------------------------------- NA00000001| 3| 2|2008/10/08 15:40| ------------------------------------------- NA00000001| 4| 4|2008/10/08 17:05| -------------------------------------------
而參與者1 = jonh,2 =斯科特,3 =麥克風,4 =搶
和工作之外的活動1 =新,2 =進展中,3 =等待批准,4 =關閉
等等數十個其他無關信息。
那麼我的問題是以下。
我已經成功地創建一個查詢,其中,當車票被打開了,我可以知道和關閉
它是這樣的:
select
a.identifier,
a.participant,
a.closedate as start,
b.closedate as finish
from
performance a,
performance b
where
a.activity = 1 -- new
and b.activity = 4 -- closed
and a.identifier = b.identifier
但我不知道票是不什麼關閉,誰在參加。
到目前爲止,我有這樣的事情:
select
a.identifier,
a.participant,
a.closedate as start
from
performance a
where
a.activity = 1 -- new
and a.identifier not in (select identifier from performance where activity = 4) --closed
這是給我的一切誰都有一個開始(新= 1),但不關閉(閉合= 4)
但對那些這裏最大的問題是打印開票的參與者,但我需要參與者。所以我將「進行中」活動添加到查詢中。
select
a.identifier,
a.participant,
a.closedate as start
from
performance a,
performance b
where
a.activity = 1 -- new
and a.identifier not in (select identifier from performance where activity = 4) --closed
and b.identifier = a.identifier
and b.activity = 2 -- inprogress..
但並不是所有的都是「新」的行是「INPROGRESS」,並與該查詢我放下所有的人。
我需要的是顯示所有「進行中」參與者,如果票證不是「進行中」,它將顯示爲空。
財產以後像
identifier|activity|participant|closedate ------------------------------------------- NA00000002| 1| |2008/10/08 15:00| ------------------------------------------- NA00000003| 1| |2008/10/08 15:20| ------------------------------------------- NA00000004| 1| |2008/10/08 15:40| ------------------------------------------- NA00000005| 2| 4|2008/10/08 15:40| ------------------------------------------- NA00000006| 2| 4|2008/10/08 15:40|
在這種情況下
NA002,NA003和NA004是 「新」,所以沒有參與者被示
雖然
NA005和NA006是被「參加者(act = 2)」,他們正在參加搶劫(參與者4)
所以我記得有這個東西叫左外連接或類似的東西,但我永遠不會理解它。我想知道的是,如何獲取「進行中」和「新建」且未關閉的標識符。
大概休息一下可能會幫助我清除自己的想法。如果有人知道如何去做,我會很感激。
通過我嘗試過的方式:
select
a.identifier,
a.participant,
a.closedate as start
from
performance a
left outer join
performance b
on
b.identifier = a.identifier
where
a.activity = 1 -- new
and a.identifier not in (select identifier from performance where activity = 4) --closed
and b.activity = 2 -- inprogress..
但給了我同樣的結果與以前(刪除僅在「新」記錄)
如何在狀態2下顯示「參與者」,如果在其他狀態下沒有任何內容?我認爲這與左側外部事物有關..我是錯了嗎?... – OscarRyz 2008-10-08 23:44:12
非常有幫助btw – OscarRyz 2008-10-09 19:08:00