我希望将结果生成到水平联合中。我能够组合在一起并生成结果。但是,我需要以预期的结果格式显示结果。
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
答案 0 :(得分:2)
如果我们可以假设pmm_question_Details总是会有比pmm_answer_details更多或更多的记录......那么两个子查询和一个左连接应该通过用户变量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,我不明白为什么需要rownumber ...
如果这可能是预期的结果......(并再次假设pmm_question具有可能在pmm_answer中的所有ID ...)
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