mysql union / mix两个表

时间:2015-01-20 10:43:30

标签: mysql nested-queries

我的查询如下:

SELECT ROUND(SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.achievedScore ELSE 0 END)/SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.applicableScore ELSE 0 END)*100) AS score1,
    scoreanalysis.sectionName, 
    scoreanalysis.sectionID, 
    scoreanalysis.wave, 
    scoreanalysis.waveID

    FROM shopcategories
    INNER JOIN locationcategories ON shopcategories.ID = locationcategories.shopcategoryID                          
    INNER JOIN scoreanalysis ON locationcategories.territoryID = scoreanalysis.territoryID                      
    WHERE shopcategories.formatID = 52 AND locationcategories.isClient =  0 
    and scoreanalysis.waveID = 160
    GROUP BY scoreanalysis.sectionID 
    ORDER BY scoreanalysis.sectionID 

输出为

enter image description here

我有其他查询,就像上面一样,但有点不同。

SELECT ROUND(SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.achievedScore ELSE 0 END)/SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.applicableScore ELSE 0 END)*100) AS score2
FROM shopcategories
INNER JOIN locationcategories ON shopcategories.ID = locationcategories.shopcategoryID                          
INNER JOIN scoreanalysis ON locationcategories.territoryID = scoreanalysis.territoryID                      
WHERE shopcategories.formatID = 52 AND locationcategories.isClient =  1 
and scoreanalysis.waveID = 160
GROUP BY scoreanalysis.sectionID 
ORDER BY scoreanalysis.sectionID 

enter image description here

我想要的是将表格混合显示如下:

enter image description here

任何可能的解决方案?任何帮助谢谢

2 个答案:

答案 0 :(得分:1)

您可以在一个查询中多次加入/引用同一个表,例如:

SELECT
scoreanalysis.sectionID, 
ROUND(SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.achievedScore ELSE 0 END)/SUM(CASE WHEN scoreanalysis.waveID = 160 THEN scoreanalysis.applicableScore ELSE 0 END)*100) AS score1,

ROUND(SUM(CASE WHEN score2.waveID = 160 THEN score2.achievedScore ELSE 0 END)/SUM(CASE WHEN score2.waveID = 160 THEN score2.applicableScore ELSE 0 END)*100) AS score2

FROM shopcategories
INNER JOIN locationcategories ON shopcategories.ID = locationcategories.shopcategoryID                          
INNER JOIN scoreanalysis ON locationcategories.territoryID = scoreanalysis.territoryID

-- Join a second time:
INNER JOIN locationcategories AS location2 ON shopcategories.ID = location2.shopcategoryID                          
INNER JOIN scoreanalysis AS score2 ON scoreanalysis.sectionID = score2.sectionID AND location2.territoryID = score2.territoryID           

WHERE shopcategories.formatID = 52
AND locationcategories.isClient =  0 
AND location2.isClient = 1 -- Reference to alias
AND scoreanalysis.waveID = 160
AND score2.waveID = 160 -- Reference to alias
GROUP BY scoreanalysis.sectionID 
ORDER BY scoreanalysis.sectionID 

答案 1 :(得分:0)

为了将内容显示在一个表中,您需要将它们连接起来,为此,两个表之间必须有相似的参数。

相关问题