2017-03-14 31 views
0

我正在尋找生成水平聯盟的結果。我可以結合在一起並生成結果。但是,我需要以預期的結果格式顯示結果。MySql:我如何獲得水平聯合的結果?

SQL

(SELECT 
    kpa_id AS 'KPA', SUM(weightage) AS 'Total' 
FROM 
    pmm_question_details 
WHERE 
    weightage NOT LIKE '%-%' 
GROUP BY kpa_id) UNION (SELECT 
    kpa_id AS 'KPA', SUM(weightage_value) AS 'Acheived' 
FROM 
    pmm_answer_details 
WHERE 
    application_id = 2 
     AND archive_value = 'No' 
GROUP BY kpa_id) 

實際結果

1 14 
2 37 
3 19 
4 40 
5 51 
6 24 
1 12 
2 19 
3 0 
6 2 

預期結果

1 14 1 12 
2 37 2 19 
3 19 3 0 
4 40 6 2 
5 51 
6 24 
+2

這是一個顯示問題。在你的程序邏輯中更好地做到這一點,而不是SQL –

+0

你以後看起來更像是一個join而不是union。您可以爲每條記錄生成/模擬一個'row_number並加入行號。但是,這假定您知道哪個表具有更多記錄並希望以特定順序得到結果。如果你不知道哪個表更大,那麼你必須執行一個左連接tbl1到tb2,然後左連接tbl2到tbl1來結合結果。因爲mySQL不支持完整的外連接。 – xQbert

回答

1

如果我們能爲廟pmm_question_Details總會有許多或更多的記錄比pmm_answer_details ......然後兩個子查詢和左連接應該做的伎倆與聯接上uservariable ROWNUM(RN)

SELECT A.KPA, A.Total, B.KPA, B.Acheived 
FROM (SELECT kpa_id AS 'KPA' 
      , SUM(weightage) AS 'Total' 
      , @RN1 := @RN1 + 1 as RN 
     FROM pmm_question_details 
     CROSS JOIN (SELECT @RN1 :=0) r1 
     WHERE weightage NOT LIKE '%-%' 
     ORDER BY KPA 
     GROUP BY kpa_id) A 

LEFT JOIN (SELECT kpa_id AS 'KPA' 
       , SUM(weightage_value) AS 'Acheived' 
       , @RN1 := @RN2 + 1 as RN 
      FROM pmm_answer_details 
      CROSS JOIN (SELECT @RN2 :=0) r2 
      WHERE application_id = 2 
      AND archive_value = 'No' 
      ORDER BY KPA 
      GROUP BY kpa_id) B 
on A.RN = B.RN 
ORDER BY A.KPA 

儘管我必須承認,我不不知道爲什麼需要排名,如果你可以在第一個地方加入KPA_ID ...

如果這可能是預期的結果...(並再次假設pmm_question具有所有可能存在的ID pmm_answer ...)

Expected Results 

1 14 1 12 
2 37 2 19 
3 19 3 0 
4 40 
5 51 
6 24 6 2 

然後將曲只會是...

SELECT A.KPA, A.Total, B.KPA, B.Acheived 
FROM (SELECT kpa_id AS 'KPA', SUM(weightage) AS 'Total' 
     FROM pmm_question_details 
     WHERE weightage NOT LIKE '%-%' 
     GROUP BY kpa_id) A 
LEFT JOIN (SELECT kpa_id AS 'KPA', SUM(weightage_value) AS 'Acheived' 
      FROM pmm_answer_details 
      WHERE application_id = 2 
      AND archive_value = 'No' 
      GROUP BY kpa_id) B 
on A.KPA = B.KPA 
+0

非常感謝。 –