2014-03-06 75 views
0

我已经在这里开始了一个SQL小提琴: http://sqlfiddle.com/#!2/26c26/7MySQL查询从多个表计数

您可以查看示例表和看到我已经在三个表有多种车型。我试图获得6列布局。前两列将是JeepMart1车型,以及这些车型的计数,接下来的两列是JeepMart2车型,最后两列是JeepMart3车型和数量。

从小提琴表此查询的结果会是什么样子:

Jeep1Models | Jeep1Counts | Jeep2Models | Jeep2Counts | Jeep3Models | Jeep3Counts | 
Wrangler   3   Wrangler   1 
Grand Cherokee 2   Grand Cherokee 3   
          Patriot   1   Patriot   5 

的想法是让每个JeepMart每个模型的计数。

如果这是可能的话,这将是在上面的樱桃得到这样每个模型的总和:(缩短可读性山坳名)

Jeep1Mod | Jeep1Cou | Jeep2Mod | Jeep2Cou | Jeep3Mod | Jeep3Cou | Totals 
Wrangler  3  Wrangler  1        4 
Grand Cher  2  Grand Cher  3        5 
         Patriot  1  Patriot  5   6 

我要查询这个数据完全开放换句话说,即使这意味着改变结果的布局,只要所有结果都在那里,并且同样容易使用。

回答

1

要COUNT(DISTINCT VIN)像下面

SELECT J1.model as Jeep1Model, 
     COUNT(DISTINCT J1.vin) as Jeep1Counts, 
     J2.model as Jeep2Model, 
     COUNT(DISTINCT J2.vin) as Jeep2Counts, 
     J3.model as Jeep3Model, 
     COUNT(DISTINCT J3.vin) as Jeep3Counts, 
     COUNT(DISTINCT J1.vin)+ 
     COUNT(DISTINCT J2.vin)+ 
     COUNT(DISTINCT J3.vin) as Total 
FROM 
(SELECT DISTINCT model FROM JeepMart1 
UNION SELECT DISTINCT model FROM JeepMart2 
UNION SELECT DISTINCT model FROM JeepMart3)A 
LEFT JOIN JeepMart1 J1 ON J1.model = A.model 
LEFT JOIN JeepMart2 J2 ON J2.model = A.model 
LEFT JOIN JeepMart3 J3 ON J3.model = A.model 
GROUP BY A.model 

sqlFiddle

+0

太好了!这就像一个冠军。 –