2015-08-18 31 views
0

我正在尋找有關如何執行以下一般指針:在SQL中,如何創建將顯示此類圖表的查詢?

我有一個圖表,看起來像這樣:

enter image description here

以下是我的SQL到目前爲止,在我使用WITH子句:

WITH WithSubquery1 AS ( 
     SELECT AUTHORIZATION_STATUS AS "TOTAL AUTHO", COUNT(authorization_status) AS "Requisition Lines Count", LOCATION_CODE AS "Location", 
      imcb.SEGMENT1 AS "CATEGORY" 

     FROM 
      apps.po_requisition_headers_all prha 
        JOIN apps.po_requisition_lines_all prla ON prla.REQUISITION_HEADER_ID = prha.REQUISITION_HEADER_ID 
         AND (prha.CANCEL_FLAG = 'N' OR prha.CANCEL_FLAG IS NULL) 

      JOIN INV.MTL_CATEGORIES_B imcb ON prla.category_id = imcb.category_id  
      JOIN HR.PER_ALL_PEOPLE_F P ON P.person_id = prha.preparer_id 
      JOIN apps.HR_LOCATIONS ahl ON prla.deliver_to_location_id = ahl.location_id 
      JOIN apps.FND_USER afu ON p.person_id = afu.employee_id 

     WHERE prla.CREATION_DATE >= '13-JUN-14'  
         AND P.effective_start_date >= 
         ALL (SELECT p_temp.EFFECTIVE_START_DATE 
         FROM HR.PER_ALL_PEOPLE_F p_temp 
         WHERE P.PERSON_ID = p_temp.PERSON_ID) 
         AND P.current_employee_flag = 'Y' 


     AND ahl.country IN ('US', 'CA', 'MX') /* countries in NA */ 
     AND imcb.SEGMENT1 = 'NONBOM' 
     GROUP BY 
       imcb.SEGMENT1 , authorization_status, LOCATION_CODE 
     ORDER BY Location_code Asc   

    ) , 

    WithSubquery2 AS 
    (
    SELECT AUTHORIZATION_STATUS AS "APPROVED AUTHO", COUNT(authorization_status) AS "Requisition Lines Apprvd Count", LOCATION_CODE AS "Location", 
      imcb.SEGMENT1 AS "CATEGORY" 

     FROM 
      apps.po_requisition_headers_all prha 
        JOIN apps.po_requisition_lines_all prla ON prla.REQUISITION_HEADER_ID = prha.REQUISITION_HEADER_ID 
         AND (prha.CANCEL_FLAG = 'N' OR prha.CANCEL_FLAG IS NULL) 

      JOIN INV.MTL_CATEGORIES_B imcb ON prla.category_id = imcb.category_id  
      JOIN HR.PER_ALL_PEOPLE_F P ON P.person_id = prha.preparer_id 
      JOIN apps.HR_LOCATIONS ahl ON prla.deliver_to_location_id = ahl.location_id 
      JOIN apps.FND_USER afu ON p.person_id = afu.employee_id 

     WHERE prla.CREATION_DATE >= '13-JUN-14'  
         AND P.effective_start_date >= 
         ALL (SELECT p_temp.EFFECTIVE_START_DATE 
         FROM HR.PER_ALL_PEOPLE_F p_temp 
         WHERE P.PERSON_ID = p_temp.PERSON_ID) 
         AND P.current_employee_flag = 'Y' 
         and AUTHORIZATION_STATUS = 'APPROVED' 

     AND ahl.country IN ('US', 'CA', 'MX') /* countries in NA */ 
     AND imcb.SEGMENT1 = 'NONBOM' 
     GROUP BY 
       imcb.SEGMENT1 , authorization_status, LOCATION_CODE 
     ORDER BY Location_code Asc   



    ) 
      SELECT WithSubquery1."TOTAL AUTHO", WithSubquery1."Requisition Lines Count", WithSubquery2."APPROVED AUTHO", WithSubquery2."Requisition Lines Apprvd Count" 
      FROM 
       WithSubquery1 JOIN WithSubquery2 
      ON 
       WithSubquery1."Location" = WithSubquery2."Location" 

我遇到的問題是,我不知道如何生成SQL,使其呈現出壓痕,用「船到」有它的下方空間位置爲每5個子類別(「#Requisition Lines」,「#Requisition Lines Approved」等)。我得到的結果到目前爲止是這樣的:

enter image description here

這是混淆閱讀,並沒有掛齒壓。

任何提示讚賞,謝謝!

+0

afaik,您無法在數據庫中顯示格式。 –

回答

1

通常,我會說你應該擔心你的前端顯示問題,而不是你的SQL。但是,如果您想要使用此技術,您可以:

WITH d AS ( 
SELECT 'Canada' loc, 'APPROVED' status, 5 this_week FROM DUAL UNION ALL 
SELECT 'Canada' loc, 'NOT APPROVED' status, 6 this_week FROM DUAL UNION ALL 
SELECT 'New York' loc, 'APPROVED' status, 15 this_week FROM DUAL UNION ALL 
SELECT 'Philadelphia' loc, 'APPROVED' status, 8 this_week FROM DUAL UNION ALL 
SELECT 'Philadelphia' loc, 'NOT APPROVED' status, 2 this_week FROM DUAL) 
SELECT case when row_number() over (partition by loc order by status) = 1 THEN loc else null end loc_display, status, this_week From d 
-- make sure your order by matches your partition and order by 
order by loc, status; 
+0

謝謝馬修! – Coffee