2016-07-09 69 views
0

我有4个表(牛,农场,疫苗,vReminder) 我想从疫苗提醒表中选择所有的提醒显示为复杂的SQL查询,以通过

(2(奶牛)有(疫苗名称1)来自(农场名称1)在此日期) (3(马))(疫苗名称1)来自(农场名称1)在该日期) (1)(牛)具有(疫苗名称5) 2)在这个日期)等等

我写了这个查询但它不分组位于相同的农场,如果牛是相同的类型: enter image description here

我的查询:

SELECT 
    (Select v.vName from vaccine as v where v.vID= vr.[vID]), 
    vr.[Type], 
    vsD, 
    COUNT(vr.[Type]), 
    f.farmName 
    FROM [QNFARM].[dbo].[vReminder] as vr inner join 
     [cattle] as c on c.RFID = vr.RFID inner join 
     farm as f on f.farmID = c.fID  
    Group by 
    vr.vID, 
    vr.Type, 
    vsD, 
    vr.RFID, 
    f.farmName 

但是当你在屏幕上打出见,这是VNAME红眼病为以同一品种,同一日期和同一农场它不组他们。

+0

您可以从groupBy中删除vr.vID并重试吗? –

+0

同样在你的select子句中,你只有vName,并且你的聚集函数在where子句中。 –

+0

如果我删除VID,它会给出一个错误(VID必须是在聚合函数或组中的列表) –

回答

0

,我被一个问题是防止组功能来收集相同的疫苗ID牛的RFID还分组问题,所以正确的查询是:

SELECT f.farmName,vr.[Type], 
    (Select v.vName from vaccine as v where v.vID= vr.[vID]) as vName,vr.vsD 
    ,COUNT(*) as Num 
    FROM [QNFARM].[dbo].[vReminder] as vr inner join [cattle] as c on c.RFID=vr.RFID inner join farm as f on f.farmID=c.fID Group by f.farmName,vr.Type,vr.vID,vr.vsD 

我刚刚从组中删除RFID现在的结果 enter image description here

0

请勿使用子查询来获取疫苗名称。只需使用连接:

SELECT v.vName, vr.[Type], vsD, COUNT(*), f.farmName 
FROM [QNFARM].[dbo].[vReminder] vr INNER JOIN 
    [cattle] c 
    ON c.RFID = vr.RFID INNER JOIN 
    farm f 
    ON f.farmID = c.fID INNER JOIN 
    vaccine v 
    ON v.vid = vr.vid 
GROUP BY v.vname, vr.Type, vsD, f.farmName; 
+0

感谢您的注意,是的,这将使性能更好 –