2016-09-19 25 views
0

我正在構建一個查詢,將建立一個基於4個表的相當大的數據集。這裏是我的查詢到目前爲止:SQL查詢,是否需要GROUP BY?如何避免不必要的複雜語法

SELECT 
CLIENT_CA."Requisition_ID", 
CLIENT_REQS."Requisition Title", 
CLIENT_REQS."Country", 
CLIENT_CD."Application_Status", 
CLIENT_CA."Candidate", 
CLIENT_CD."Gender", 
max(case when 
CLIENT_CA."Process_of_Activity" = 'Application Entry' then 
CLIENT_CA."Completed_on" end) as "ENTRY", 
max(case when 
CLIENT_CA."Process_of_Activity" = 'Candidate Selection' then 
CLIENT_CA."Completed_on" end) as "Selection", 
max(case when 
CLIENT_CA."Process_of_Activity" = 'Job Offer' then 
CLIENT_CA."Completed_on" end) as "Offer", 
CLIENT_RR."Status_Reason(E-Rec)" 
FROM CLIENT_CA 
LEFT JOIN CLIENT_CD ON (CLIENT_CA."Candidate_ID"=CLIENT_CD."Candidate_ID" 
and CLIENT_CA."Requisition_ID"=CLIENT_CD."Requisition_ID") 
LEFT JOIN CLIENT_REQS ON CLIENT_REQS."Requisition_ID"=CLIENT_CA."Requisition_ID" 
LEFT JOIN CLIENT_RR 
ON (CLIENT_CA."Candidate_ID"=CLIENT_RR."Candidate_ID" and CLIENT_CA."Requisition_ID"=CLIENT_RR."Requisition_ID") 
GROUP BY CLIENT_CA."Candidate" 
    ,CLIENT_CA."Requisition_ID" 
    ,CLIENT_CD."Gender" 
    ,CLIENT_REQS."Requisition Title" 
    ,CLIENT_REQS."Country" 
    ,CLIENT_RR."Status_Reason(E-Rec)" 
    ,CLIENT_CD."Application_Status"; 

技術上此查詢工作得很好,給我正是我需要的,沒有錯誤。問題是我需要向SELECT子句和系統添加80列,或者邏輯強制我把每一列添加到那裏,並將它放在GROUP BY子句中......我想這是因爲的「最大」功能。基本上,CLIENT_CA是我的「基礎」表,我試圖通過其他3張表上的VLOOKUP函數來實現MS Excel中的功能。我只是有點擔心,我會讓這有點不必要的複雜。請不要猶豫,告訴我,我只是簡單的愚蠢:)但只有如果你有一個建議如何做到這一點更好:)謝謝。哦....我在dashDB上運行這個。

+2

創建包含最小巧的一個子查詢聚合適合您的需求,然後將其加入到另一個表中。 –

+1

如果此DB支持,則可以使用WITH子句。 – massko

回答

1

使用子查詢從主表中抽取,連接列和計算列(條目,選擇報價)這樣你就可以通過列限制組固定數量

SELECT 
CA."Requisition_ID", 
REQS."Requisition Title", 
REQS."Country", 
CD."Application_Status", 
CA."Candidate", 
CD."Gender", 
"ENTRY", 
"Selection", 
"Offer", 
RR."Status_Reason(E-Rec)" 
FROM ( 
    SELECT 
     "Requisition_ID", "Candidate_ID", "Candidate", 
     max(case when "Process_of_Activity" = 'Application Entry' then "Completed_on" end) as "ENTRY", 
     max(case when "Process_of_Activity" = 'Candidate Selection' then "Completed_on" end) as "Selection", 
     max(case when "Process_of_Activity" = 'Job Offer' then "Completed_on" end) as "Offer" 
    FROM CLIENT_CA 
    GROUP BY "Candidate", "Requisition_ID", "Candidate_ID" 
    ) AS CA 
LEFT JOIN CLIENT_CD AS CD ON (CA."Candidate_ID"=CD."Candidate_ID" and CA."Requisition_ID"=CD."Requisition_ID") 
LEFT JOIN CLIENT_REQS AS REQS ON REQS."Requisition_ID"=CA."Requisition_ID" 
LEFT JOIN CLIENT_RR AS RR ON (CA."Candidate_ID"=RR."Candidate_ID" and CA."Requisition_ID"=RR."Requisition_ID") 
+0

謝謝@MtwStark !!!它像一個魅力。謝謝!。 –

+0

@MikePala我很高興能有任何幫助 – MtwStark