如果我們能爲廟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
這是一個顯示問題。在你的程序邏輯中更好地做到這一點,而不是SQL –
你以後看起來更像是一個join而不是union。您可以爲每條記錄生成/模擬一個'row_number並加入行號。但是,這假定您知道哪個表具有更多記錄並希望以特定順序得到結果。如果你不知道哪個表更大,那麼你必須執行一個左連接tbl1到tb2,然後左連接tbl2到tbl1來結合結果。因爲mySQL不支持完整的外連接。 – xQbert