MySql : How do I have Horizontal Union of results?

标签 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

最佳答案

如果我们可以假设 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 上保留连接,那么我不明白为什么需要行号...

如果这可能是预期结果...(再次假设 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

关于MySql : How do I have Horizontal Union of results?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42793573/

相关文章:

mysql - 如何查询geoname数据库?

mysql - 如何在联结表中执行编辑

mysql - 有没有可以返回不同数量产品的功能?

mysql - 类型错误 : Cannot read property 'query' of undefined?

php - 从数据库中选择数据并在 MYSQL 中创建新列

MySQL:按节数排序

PHP MySQL utf 8 编码

MySQL 关系。用户角色

php - Mysql查询根据ID的逗号分隔字符串搜索数据

php - 无法连接到其他服务器上的 phpmyadmin