2012-11-16 70 views
-1

我有3个表:多个连接上超过2个表

Cars 
----------------- 
CarBrand | Amount 
Honda | 0 
Mitsu | 5 
Ford | 7 

CarParts 
-------------------- 
CarPartID | CarBrand 
001  | Honda 
002  | Mitsu 
003  | Ford 
004  | Ford 
005  | Ford 

Drivers 
----------------------- 
DriverName | CarBrand 
Tom  | Ford 
John  | Mitsu 
Mark  | Mitsu 

我需要在以下结果数据:

CarBrand | PartsAmount | DriversAmount

这可能吗?计数经过充分的加入并没有在那里工作......

+2

看起来像你的家庭作业,你能在我们给你答案之前张贴你的努力吗? – fnurglewitz

+1

选择 DEVICE2M1.LOGICAL_NAME, SUBSCRIPM1.STATUS如订阅, SUBSCRIPM1.SUBSCRIBERTYPE为usersubscribe, INCIDENTSM1.AFFECTED_ITEM呼叫, INCIDENTSM1.OPEN_TIME为call_date, PROBSUMMARYM2.AFFECTED_ITEM的事件, CM3RM2.AFFECTED_ITEM变革 从DEVICE2M1 全面加入SUBSCRIPM1上DEVICE2M1.LOGICAL_NAME = SUBSCRIPM1.SERVICENAME 全面加入INCIDENTSM1上DEVICE2M1.LOGICAL_NAME = INCIDENTSM1.AFFECTED_ITEM 全面加入PROBSUMMARYM2上DEVICE2M1.LOGICAL_NAME = PROBSUMMARYM2.AFFECTED_ITEM 完全加入DEVICE2M1.LOGICAL_NAME上的CM3RM2 = CM3RM2.AFFECTED_ITEM 其中DEVICE2M1.SUBTYPE ='服务' – Anton

+0

无法看到此选择和您的问题之间的任何关系,您甚至不会查询您在问题 – fnurglewitz

回答

1

这里有几个方法可以做到你想要什么:SQLFiddle

select c.CarBrand, j.parts, k.drivers 
from 
    Cars c 
cross apply 
(
    select count(*) 
    from CarParts cp 
    where cp.CarBrand = c.CarBrand 
) j (parts) 
cross apply 
(
    select count(*) 
    from Drivers d 
    where d.CarBrand = c.CarBrand 
) k (drivers); 

select 
    c.CarBrand, 
    (select count(*) from CarParts cp where cp.CarBrand = c.CarBrand) as Parts, 
    (select count(*) from Drivers d where d.CarBrand = c.CarBrand) as Drivers 
from 
    Cars C 

这是正确的吗?

+0

哇!有用! 对于迟到的回复感到抱歉,我正在尝试使用真实数据的方法 非常感谢! – Anton