2016-05-26 4 views
0

zu lösen, wenn Sie den folgenden Abfrage ausgeführt wird, erhalte ich eine Fehlermeldung:Sub Abfragefehler, wie

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Ich weiß, was es bedeutet, aber ich bin nicht sicher, wie es zu lösen, dachte ich an eine For Each die Schaffung Schleife, die die Websites in meiner Budgettabelle vergleicht und den Wert basierend auf den verschiedenen Websites zurückgibt.

Ihre Eingabe wird sehr geschätzt.

Declare @FromDate DateTime 
DEclare @ToDate DateTime 
Declare @WACost Numeric (18,2) 
Declare @WABill Numeric (18,2) 
Declare @FBill Numeric (18, 2) 
Declare @FCost Numeric (18,2) 

Set @FromDate = '20160501' 
Set @ToDate = '20160531' 

Set @WACost = (
       Select 
        sum(dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + Sum((dbo.FleetData.OwnCost + dbo.FleetData.OpCost) 
        * dbo.DataInput.Hrs) 
       From  dbo.DataInput INNER JOIN 
         dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
         dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
         dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID 
      WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate and dbo.workcodes.WorkCode = 101 
      ) 

Set @WABill = (
       Select 
       sum(dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + Sum((dbo.FleetData.OwnBill + dbo.FleetData.OpBill) 
       * dbo.DataInput.Hrs) 
       From dbo.Datainput Inner Join 
        dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
        dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
        dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID 

       WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate and dbo.WorkCodes.WorkCode = 101 
      ) 

Set @FBill = (
      Select 
       ((dbo.Budget.SalWage * (1 + dbo.Budget.SalWagePerc)) + dbo.budget.PG0 + 
       (dbo.budget.PG * (1 + PGPerc)))/(DAY(EOMONTH(@ToDate))) * Day(@ToDate) 

      From dbo.budget 

      WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
      ) 

Set @FCost = (
       Select (dbo.Budget.SalWage + dbo.budget.PG0 + dbo.budget.PG)/
       (DAY(EOMONTH(@ToDate))) * Day(@ToDate) 

       From dbo.budget 

       WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
      ) 

SELECT  

      @WACost as WACostTotal, @WABill as WABillTotal, @FBill as FBillCalc, @FCost as FCostCalc, 

       dbo.DataInput.DataInputID as DataInpID, dbo.DataInput.ProdDate as ProdDate, dbo.WorkCodes.WorkCode as WCode, dbo.DataInput.Hrs as ProdHrs, dbo.DataInput.Loads as ProdLoads, 
       dbo.DataInput.Fuel as ProdFuel, dbo.FleetData.FleetNo as ProdFltNo, dbo.JobCodes.JobCode, 
       dbo.FleetType.EquipmentType as EqType, dbo.FleetModel.ModelName as Model, dbo.Sites.SiteName as ProdSiteName, 
       dbo.JobCodes.JobDetails as JCDet, dbo.JobCodes.BillMeth as BillM, 
       dbo.FleetData.OwnCost as FltOwnCost, dbo.fleetdata.OpCost as FltOpCost, dbo.fleetdata.OwnBill as FltOwnBill, 
       dbo.FleetData.OpBill as FltOpBill, 

       (dbo.FleetModel.ModelSize * dbo.DataInput.Loads) as ProdBCM, 
       dbo.HRData.EmpNo as HREmp, dbo.HRData.RatePH as EmpCost, dbo.HRData.RateBill as EmpBill, 
       dbo.DataInput.ShiftHrs as ProdShHrs, dbo.FleetModel.ModelSize as MSize, 
       (dbo.DataInput.Fuel * dbo.JobCodes.FuelRate) as ProdFuelCost, 
       dbo.budget.BudDate as BdgDate, dbo.Budget.RevBCM as BdgRevBCM, dbo.Budget.PricePerBCM as BdgBCMPrice, 
       dbo.budget.BCMValue as BdgBCMVal, dbo.budget.SalWage as BdgSalWage, dbo.budget.Fuel as FuelBdg, 
       dbo.budget.PG0 as PGZero, dbo.budget.PG as PGCP, 
       dbo.budget.siteId as BudgSite, 

       --LAST DAY BCM 
       IIF(dbo.DataInput.ProdDate = @ToDate, dbo.DataInput.Loads * dbo.FleetModel.ModelSize, 0) as LDBCM, 

       --BILLING CALCS 

       --PG Billing 
       IIF(dbo.Workcodes.WorkCode = 101, 
       (dbo.Budget.SalWage * (1 + dbo.Budget.SalWagePerc)) + dbo.budget.PG0 + 
       (dbo.budget.PG * (1 + PGPerc)),0) as PGBill, 

       --FleetBill 
       IIF(dbo.Workcodes.WorkCode = 101, 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs,0) as FleetBill, 

       --LabourCost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill),0) as LabourBill, 

       --Total Variable Bill 
       iif(dbo.Workcodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs,0) as TotalVarBill, 

       --WABill 
       iif(dbo.Workcodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs)/
       @WABill * @FBill + 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs), 0) as WABill, 

       --COST CALCS 

       --PG Cost 

       IIF(dbo.WorkCodes.WorkCode = 101, 
       (dbo.Budget.SalWage + dbo.budget.PG0 + dbo.budget.PG),0) as PGCost, 

       --FLEETCOST 
       IIF(dbo.WorkCodes.WorkCode = 101, 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs,0) as FleetCost, 

       --LabourCost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH),0) as LabourCost, 

       --Total Variables Cost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs,0) as TotalVarCost, 

       --WAOnly 
       iif(dbo.WorkCodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs)/
       @WACost * @FCost,0) 
       as WACalc, 

       --WA 
       iif(dbo.WorkCodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs)/
       @WACost * @FCost + 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs) , 0) as WACost 


FROM   dbo.DataInput INNER JOIN 
         dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
         dbo.FleetMake ON dbo.FleetData.FleetMakeId = dbo.FleetMake.FleetMakeId INNER JOIN 
         dbo.FleetModel ON dbo.FleetData.FleetModelId = dbo.FleetModel.ModelId INNER JOIN 
         dbo.FleetType ON dbo.FleetData.FleetTypeId = dbo.FleetType.FleetTypeId INNER JOIN 
         dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
         dbo.Sites ON dbo.DataInput.SiteId = dbo.Sites.SiteId INNER JOIN 
         dbo.Budget ON dbo.Sites.SiteId = dbo.Budget.SiteId AND dbo.DataInput.Period = dbo.Budget.Period INNER JOIN 
         dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID INNER JOIN 
         dbo.JobCodes ON dbo.DataInput.JobCodeId = dbo.JobCodes.JobCodeId 

WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate 

Group By dbo.DataInput.DataInputID, dbo.DataInput.DataInputID, dbo.DataInput.ProdDate, dbo.WorkCodes.WorkCode, dbo.DataInput.Hrs, 
       dbo.DataInput.Loads, dbo.DataInput.Fuel, dbo.FleetData.FleetNo, dbo.JobCodes.JobCode, 
       dbo.FleetType.EquipmentType, dbo.FleetModel.ModelName, dbo.Sites.SiteName, 
       dbo.JobCodes.JobDetails, dbo.JobCodes.BillMeth, dbo.FleetData.OwnCost, dbo.fleetdata.OpCost, 
       dbo.fleetdata.OwnBill, dbo.FleetData.OpBill,dbo.HRData.EmpNo, dbo.HRData.RatePH, dbo.HRData.RateBill, 
       dbo.DataInput.ShiftHrs, dbo.FleetModel.ModelSize, dbo.budget.BudDate, dbo.Budget.RevBCM, dbo.Budget.PricePerBCM, 
       dbo.budget.BCMValue, dbo.budget.SalWage, dbo.budget.Fuel, dbo.budget.PG0, dbo.budget.PG, 
       dbo.budget.siteId, dbo.jobcodes.FuelRate, dbo.datainput.workcodeid, dbo.budget.SalWagePerc, dbo.Budget.PGPerc, 
       dbo.WorkCodes.WorkCodeID 

Order By dbo.DataInput.ProdDate 
+1

Wenn Sie mit derselben Abfrage fortfahren möchten, stellen Sie sicher, dass jede Unterabfrage nur einen Datensatz zurückgibt. Wenn es mehr als eins zurückgibt, werden Sie solchen Fehler begegnen. Sie können ** TOP 1 ** in jeder Unterabfrage verwenden, um einen solchen Fehler zu vermeiden. Zum Beispiel ** Set @FBill = (SELECT TOP 1 ** – pedram

+0

Es wäre wirklich hilfreich, wenn Sie Beispieldaten zur Verfügung stellen könnten. Fügen Sie auch die Ausgabe ein, die Sie erwarten, dass das Sample erzeugt wird. SO hat eine [Anleitung zur Bereitstellung guter Beispiele] (http : //stackoverflow.com/help/mcve) hier, was dir helfen kann –

+0

Ich dachte, du musst 'sum' anwenden während du ** @ FCost ** und ** @ FBill ** berechnest, aber es scheint wie @Pedram Vorschlag erfüllt auch hier, wenn Sie keine Summe von Werten anwenden wollen –

Antwort

0

Unten ist der Ort, wo Sie sind anfällig für Fehler zu erhalten ..

Set @FBill = (
      Select 
       ((dbo.Budget.SalWage * (1 + dbo.Budget.SalWagePerc)) + dbo.budget.PG0 + 
       (dbo.budget.PG * (1 + PGPerc)))/(DAY(EOMONTH(@ToDate))) * Day(@ToDate) 

      From dbo.budget 

      WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
      ) 

Set @FCost = (
       Select (dbo.Budget.SalWage + dbo.budget.PG0 + dbo.budget.PG)/
       (DAY(EOMONTH(@ToDate))) * Day(@ToDate) 

       From dbo.budget 

       WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
) 

Sie oben und Reihenfolge von unten

nur ein Datensatz wie zurückkehren ein
set @fbill=select top 1 from table order by somevalue 
+0

Vielen Dank, aber ich möchte auch die anderen Werte zurückgegeben. Um zu erklären, ich habe Seiten, Seite 1, 2 usw. ... so würde ich gerne die Auswahl pro Website tun. –

+0

Dann müssen Sie die Anwendung mit Variablen entfernen und bauen Sie die Logik mit Cross apply.Its ist sehr schwierig, Sie mit einigen Testdaten zu zeigen – TheGameiswar

+0

Meine Entschuldigung, das war nicht clever von mir ... haha. Dies scheint zu funktionieren. Ich danke dir sehr! –

0

unten Versuchen Sie, Verwenden Sortieren nach in Sub-Abfrage benötigt, wenn.

Declare @FromDate DateTime 
DEclare @ToDate DateTime 
Declare @WACost Numeric (18,2) 
Declare @WABill Numeric (18,2) 
Declare @FBill Numeric (18, 2) 
Declare @FCost Numeric (18,2) 

Set @FromDate = '20160501' 
Set @ToDate = '20160531' 

Set @WACost = (Select TOP 1 
        sum(dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + Sum((dbo.FleetData.OwnCost + dbo.FleetData.OpCost) 
        * dbo.DataInput.Hrs) 
       From  dbo.DataInput INNER JOIN 
         dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
         dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
         dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID 
      WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate and dbo.workcodes.WorkCode = 101 
      ) 

Set @WABill = (SELECT TOP 1 
       sum(dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + Sum((dbo.FleetData.OwnBill + dbo.FleetData.OpBill) 
       * dbo.DataInput.Hrs) 
       From dbo.Datainput Inner Join 
        dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
        dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
        dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID 
       WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate and dbo.WorkCodes.WorkCode = 101 
      ) 

Set @FBill = (SELECT TOP 1 
       ((dbo.Budget.SalWage * (1 + dbo.Budget.SalWagePerc)) + dbo.budget.PG0 + 
       (dbo.budget.PG * (1 + PGPerc)))/(DAY(EOMONTH(@ToDate))) * Day(@ToDate) 

      From dbo.budget 

      WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
      ) 

Set @FCost = (SELECT TOP 1 (dbo.Budget.SalWage + dbo.budget.PG0 + dbo.budget.PG)/
       (DAY(EOMONTH(@ToDate))) * Day(@ToDate) 
       From dbo.budget 

       WHERE Period >= Month(@FromDate) and Period <= Month(@ToDate) 
      ) 

SELECT  @WACost as WACostTotal, @WABill as WABillTotal, @FBill as FBillCalc, @FCost as FCostCalc, 
       dbo.DataInput.DataInputID as DataInpID, dbo.DataInput.ProdDate as ProdDate, dbo.WorkCodes.WorkCode as WCode, dbo.DataInput.Hrs as ProdHrs, dbo.DataInput.Loads as ProdLoads, 
       dbo.DataInput.Fuel as ProdFuel, dbo.FleetData.FleetNo as ProdFltNo, dbo.JobCodes.JobCode, 
       dbo.FleetType.EquipmentType as EqType, dbo.FleetModel.ModelName as Model, dbo.Sites.SiteName as ProdSiteName, 
       dbo.JobCodes.JobDetails as JCDet, dbo.JobCodes.BillMeth as BillM, 
       dbo.FleetData.OwnCost as FltOwnCost, dbo.fleetdata.OpCost as FltOpCost, dbo.fleetdata.OwnBill as FltOwnBill, 
       dbo.FleetData.OpBill as FltOpBill, 

       (dbo.FleetModel.ModelSize * dbo.DataInput.Loads) as ProdBCM, 
       dbo.HRData.EmpNo as HREmp, dbo.HRData.RatePH as EmpCost, dbo.HRData.RateBill as EmpBill, 
       dbo.DataInput.ShiftHrs as ProdShHrs, dbo.FleetModel.ModelSize as MSize, 
       (dbo.DataInput.Fuel * dbo.JobCodes.FuelRate) as ProdFuelCost, 
       dbo.budget.BudDate as BdgDate, dbo.Budget.RevBCM as BdgRevBCM, dbo.Budget.PricePerBCM as BdgBCMPrice, 
       dbo.budget.BCMValue as BdgBCMVal, dbo.budget.SalWage as BdgSalWage, dbo.budget.Fuel as FuelBdg, 
       dbo.budget.PG0 as PGZero, dbo.budget.PG as PGCP, 
       dbo.budget.siteId as BudgSite, 

       --LAST DAY BCM 
       IIF(dbo.DataInput.ProdDate = @ToDate, dbo.DataInput.Loads * dbo.FleetModel.ModelSize, 0) as LDBCM, 

       --BILLING CALCS 

       --PG Billing 
       IIF(dbo.Workcodes.WorkCode = 101, 
       (dbo.Budget.SalWage * (1 + dbo.Budget.SalWagePerc)) + dbo.budget.PG0 + 
       (dbo.budget.PG * (1 + PGPerc)),0) as PGBill, 

       --FleetBill 
       IIF(dbo.Workcodes.WorkCode = 101, 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs,0) as FleetBill, 

       --LabourCost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill),0) as LabourBill, 

       --Total Variable Bill 
       iif(dbo.Workcodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs,0) as TotalVarBill, 

       --WABill 
       iif(dbo.Workcodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs)/
       @WABill * @FBill + 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RateBill) + 
       (FleetData.OwnBill + FleetData.OpBill) * DataInput.Hrs), 0) as WABill, 

       --COST CALCS 

       --PG Cost 

       IIF(dbo.WorkCodes.WorkCode = 101, 
       (dbo.Budget.SalWage + dbo.budget.PG0 + dbo.budget.PG),0) as PGCost, 

       --FLEETCOST 
       IIF(dbo.WorkCodes.WorkCode = 101, 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs,0) as FleetCost, 

       --LabourCost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH),0) as LabourCost, 

       --Total Variables Cost 
       iif(dbo.WorkCodes.WorkCode = 101, 
       (dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs,0) as TotalVarCost, 

       --WAOnly 
       iif(dbo.WorkCodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs)/
       @WACost * @FCost,0) 
       as WACalc, 

       --WA 
       iif(dbo.WorkCodes.WorkCode = 101, 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs)/
       @WACost * @FCost + 
       ((dbo.DataInput.ShiftHrs * dbo.HRDATA.RatePH) + 
       (FleetData.OwnCost + FleetData.OpCost) * DataInput.Hrs) , 0) as WACost 


FROM   dbo.DataInput INNER JOIN 
         dbo.FleetData ON dbo.FleetData.FleetId = dbo.DataInput.FleetId INNER JOIN 
         dbo.FleetMake ON dbo.FleetData.FleetMakeId = dbo.FleetMake.FleetMakeId INNER JOIN 
         dbo.FleetModel ON dbo.FleetData.FleetModelId = dbo.FleetModel.ModelId INNER JOIN 
         dbo.FleetType ON dbo.FleetData.FleetTypeId = dbo.FleetType.FleetTypeId INNER JOIN 
         dbo.HRData ON dbo.DataInput.HRId = dbo.HRData.HRId INNER JOIN 
         dbo.Sites ON dbo.DataInput.SiteId = dbo.Sites.SiteId INNER JOIN 
         dbo.Budget ON dbo.Sites.SiteId = dbo.Budget.SiteId AND dbo.DataInput.Period = dbo.Budget.Period INNER JOIN 
         dbo.WorkCodes ON dbo.DataInput.WorkCodeId = dbo.WorkCodes.WorkCodeID INNER JOIN 
         dbo.JobCodes ON dbo.DataInput.JobCodeId = dbo.JobCodes.JobCodeId 

WHERE ProdDate >= @FromDate AND ProdDate <= @ToDate 

Group By dbo.DataInput.DataInputID, dbo.DataInput.DataInputID, dbo.DataInput.ProdDate, dbo.WorkCodes.WorkCode, dbo.DataInput.Hrs, 
       dbo.DataInput.Loads, dbo.DataInput.Fuel, dbo.FleetData.FleetNo, dbo.JobCodes.JobCode, 
       dbo.FleetType.EquipmentType, dbo.FleetModel.ModelName, dbo.Sites.SiteName, 
       dbo.JobCodes.JobDetails, dbo.JobCodes.BillMeth, dbo.FleetData.OwnCost, dbo.fleetdata.OpCost, 
       dbo.fleetdata.OwnBill, dbo.FleetData.OpBill,dbo.HRData.EmpNo, dbo.HRData.RatePH, dbo.HRData.RateBill, 
       dbo.DataInput.ShiftHrs, dbo.FleetModel.ModelSize, dbo.budget.BudDate, dbo.Budget.RevBCM, dbo.Budget.PricePerBCM, 
       dbo.budget.BCMValue, dbo.budget.SalWage, dbo.budget.Fuel, dbo.budget.PG0, dbo.budget.PG, 
       dbo.budget.siteId, dbo.jobcodes.FuelRate, dbo.datainput.workcodeid, dbo.budget.SalWagePerc, dbo.Budget.PGPerc, 
       dbo.WorkCodes.WorkCodeID 

Order By dbo.DataInput.ProdDate 
0

einfach nutzen können beachten.

Wenn Sie alle möchten, dann sollten Sie:

Set @FromDate = '20160501' 
Set @ToDate = '20160601' 

und überprüfen wie:

(@FromDate <= ProdDate) AND (ProdDate < @ToDate) 

Ich glaube, Sie fast einen Tag fehlen.