2014-03-12 22 views
-1
SELECT 
    VehicleOwner, 
    COALESCE(CarMileage, MotorcycleMileage, BicycleMileage, 0) AS Mileage, 
    Count(*) 
FROM 
    VehicleMileage 
Group by VehicleOwner 
Having Count(*)>1 
+1

什么数据库?问题是什么?你想达到什么目的? –

+0

'COALESCE'已经成群,因为它会首先将'CarMileage'设置为'Mileage',如果不存在,那么'MotorcycleMileage'由于'Mileage'不存在,所以'BicycleMileage'作为'里程' – Max

+0

这是怎么回事问题在这个网站上仍然存在这种形式? –

回答

0

我想通了什么......

SELECT b.VehicleOwner, City 
FROM (SELECT a.VehicleOwner, 
     COALESCE(a.City, (Select b.City from a INNER Place b), 
       (Select b.City from a INNER Place b)) AS City 
     FROM VehicleMileage a) AS b 
WHERE b.VehicleOwner IN (SELECT VehicleOwner 
        FROM VehicleMileage 
        GROUP BY VehicleOwner 
        HAVING COUNT(*)>1); 
0

这有效。

SELECT 
    VehicleOwner, 
    COALESCE(CarMileage, MotorcycleMileage, BicycleMileage, 0) AS Mileage, 
    Count(*) 
FROM 
    VehicleMileage 
Group by VehicleOwner, COALESCE(CarMileage, MotorcycleMileage, BicycleMileage, 0) 
Having Count(*)>1 

您还可以将COALESCE中的每列放在GROUP BY部分中。取决于你想要达到

+0

如果我有Coalesce(CarMileage,(从...选择MotorcycleMileage))?谢谢! – Andrew

+0

@Andrew - 那么你必须指定每一列。 GROUP BY中不能有子查询。 'GROUP BY CarMileage,MotorcycleMileage,BicycleMileage'。但我不认为你的输出与第一种情况相同。 – CynicalSection

+0

这就是我的观点。如何做到这一点?有一个子选择合并?我有这样的事情:合并(cy.Name,(从placei选择co.Location),(SELECT co.Location from place2)) – Andrew

0
SELECT 
    VehicleOwner, 
    SUM(COALESCE(CarMileage, 0)+COALESCE(MotorcycleMileage, 0)+COALESCE(BicicleMileage, 0)) AS Mileage, 
    COUNT(*) cnt 
FROM VehicleMileage 
GROUP BY VehicleOwner 
HAVING cnt > 1