【问题标题】:An expression of non boolean type specified in a context where condition is expected near )在预期条件接近的上下文中指定的非布尔类型的表达式)
【发布时间】:2015-05-19 17:26:24
【问题描述】:

如果我删除 Where 子句,下面提到的查询可以正常工作。请问有什么建议吗??

SELECT     dbo.MPProjektBuchungserfassung.BuchungsErfassungID, dbo.MPProjektBuchungserfassung.QuellReferenz, dbo.MPProjektstamm.Projektnummer, 
                      dbo.MPProjektstamm.Projekttyp, dbo.MPProjektstamm.Matchcode AS ProjektMatchcode, dbo.MPProjektPhasen.PhasenID, 
                      dbo.MPProjektPhasen.Phase AS PhasenMatchcode, MPProjektleiterstamm.Personalnummer AS ProjektLeiternummer, 
                      MPProjektleiterstamm.Matchcode AS ProjektLeiterMatchcode, dbo.MPVKVertraege.VertragsID, dbo.MPVKVertraege.Vertragsnummer, 
                      dbo.MPVKVertraege.Bezeichnung, dbo.MPVKVertraege.KHKMandant, dbo.MPVKVertraege.Referenznummer, 
                      dbo.MPVKVertraege.Referenzzeichen, dbo.MPVKVertraegePositionen.Vertragsposition, dbo.MPVKVertraegePositionen.Matchcode AS PositionsMatchcode, 
                      dbo.MPHotlineAnfrage.AnfrageID, dbo.MPHotlineAnfrage.Kurzbeschreibung, dbo.MPHotlineAnfrage.AnfrageText, dbo.MPHotlineAnfrage.CardCode, 
                      dbo.MPHotlineAnfrage.AdressMatchcode, dbo.MPHotlineAnfrage.Referenz, dbo.MPPersonenstamm.Personalnummer, IsNull(dbo.MPVKVertraegePositionen.USER_Ratio, 1) AS 'Ratio',
                      dbo.MPPersonenstamm.Matchcode AS PersonalMatchcode,  dbo.MPVKVertraege.Projektnummer,
                      case dbo.MPPerioden.BezeichnungPeriode  when 'Januar' then '01.January' when 'Februar' then '02.February' when 'März' then '03.March' 
when 'April' then '04.April' when 'Mai' then '05.May' when 'Juni' then '06.June' 
when 'Juli' then '07.July' when 'August' then '08.August' when 'September' then '09.September' 
when 'Oktober' then '10.October' when 'November' then '11.November' when 'Dezember' then '12.December' 
End as 'Month',dbo.MPPerioden.BezeichnungJahr, 
                      dbo.MPProjektBuchungskopf.Periode, dbo.MPProjektBuchungserfassung.LeistungsTag, dbo.MPProjektBuchungserfassung.Menge, 
                      dbo.MPProjektBuchungserfassung.MengeFAK as 'Horas', dbo.MPProjektBuchungserfassung.Aktivitaet, dbo.MPProjektBuchungserfassung.Memo, 
                      dbo.MPProjektBuchungserfassung.Freigabe, MPProjektLeistungserfassung.FakturaID, 
                      CASE dbo.MPHotlineAnfrage.Status WHEN '1' THEN 'New' WHEN '2' THEN 'In Process' WHEN '3' THEN 'Customer Action' WHEN '4' THEN '3rd Party Investigation' WHEN
                       '5' THEN 'Closed' END AS 'Status',dbo.MPPerioden.Periode as 'Ind Periode',
                       T2.ContractNo,T2.Contract_Desc, ISNULL(T2.Q1, 0) AS 'Q1', 
ISNULL(T2.January, 0) AS 'January', ISNULL(T2.February, 0) AS 'February', ISNULL(T2.March, 0) AS 'March', 
ISNULL(T2.Invoiced_Q1, 0) AS 'Invoiced_Q1', ISNULL(T2.Q2, 0) AS 'Q2', ISNULL(T2.April, 0) AS 'April', 
ISNULL(T2.May,0) AS 'May', ISNULL(T2.June, 0) AS 'June', ISNULL(T2.Invoiced_Q2, 0) AS 'Invoiced_Q2', 
ISNULL(T2.Q3, 0) AS 'Q3', ISNULL(T2.July, 0) AS 'July', ISNULL(T2.August, 0) AS 'August', 
ISNULL(T2.Invoiced_Q3, 0) AS 'Invoiced_Q3', ISNULL(T2.Q4, 0) AS 'Q4', ISNULL(T2.September, 0) AS 'September', 
ISNULL(T2.October, 0) AS 'October',ISNULL(T2.November, 0) AS 'November', ISNULL(T2.December, 0) AS 'December', 
ISNULL(T2.Invoiced_Q4, 0) AS 'Invoiced_Q4',T2.Remaining_Year, T2.Comments, T2.Q1_Comments, T2.January_Comments, 
T2.February_Comments, T2.March_Comments, T2.Q2_Comments, T2.April_Comments, T2.May_Comments, T2.June_Comments, 
T2.Q3_Comments, T2.July_Comments, T2.August_Comments,T2.September_Comments, T2.Q4_Comments, T2.October_Comments, 
T2.November_Comments, T2.December_Comments                      
 , (SELECT Count(MPProjektLeistungserfassung.BuchungserfassungID) AS LCount 
              FROM MPProjektLeistungserfassung
            WHERE MPProjektLeistungserfassung.BuchungserfassungID = MPProjektBuchungserfassung.BuchungsErfassungID 
               AND MPProjektLeistungserfassung.Position > 0) AS Zuschlag                         

FROM         dbo.MPProjektBuchungserfassung INNER JOIN
                      dbo.MPProjektBuchungskopf ON dbo.MPProjektBuchungserfassung.BuchungsKopf = dbo.MPProjektBuchungskopf.BuchungsKopfID INNER JOIN
                      dbo.MPProjektLeistungserfassung AS MPProjektLeistungserfassung ON 
                      dbo.MPProjektBuchungserfassung.BuchungsErfassungID = MPProjektLeistungserfassung.BuchungserfassungID AND 
                      MPProjektLeistungserfassung.Position = 0 INNER JOIN
                      dbo.MPProjektstamm ON dbo.MPProjektBuchungserfassung.Projektnummer = dbo.MPProjektstamm.Projektnummer INNER JOIN
                      dbo.vwMPProjektleiter ON dbo.vwMPProjektleiter.Projektnummer = dbo.MPProjektBuchungserfassung.Projektnummer LEFT OUTER JOIN
                      dbo.MPProjektPhasen ON dbo.MPProjektBuchungserfassung.PhasenID = dbo.MPProjektPhasen.PhasenID INNER JOIN
                      dbo.MPVKVertraege ON MPProjektLeistungserfassung.VertragsID = dbo.MPVKVertraege.VertragsID INNER JOIN
                      dbo.MPVKVertraegePositionen ON MPProjektLeistungserfassung.Vertragsposition = dbo.MPVKVertraegePositionen.Vertragsposition left outer JOIN
                      dbo.MPHotlineAnfrage ON dbo.MPHotlineAnfrage.AnfrageID = dbo.MPProjektBuchungserfassung.QuellReferenz INNER JOIN
                      dbo.MPPersonenstamm AS MPProjektleiterstamm ON dbo.vwMPProjektleiter.Personalnummer = MPProjektleiterstamm.Personalnummer INNER JOIN
                      dbo.MPPersonenstamm ON dbo.MPProjektBuchungskopf.Personalnummer = dbo.MPPersonenstamm.Personalnummer INNER JOIN
                      dbo.MPPerioden ON dbo.MPProjektBuchungskopf.Periode = dbo.MPPerioden.PeriodeJahr
                      LEFT OUTER JOIN dbo.MP_USER_Retainers AS T2 ON dbo.MPVKVertraege.VertragsID= T2.ContractNo

where  DATEADD(MONTH,DATEDIFF(MONTH,-1,GETDATE())-1, -1)

order by dbo.MPProjektBuchungskopf.Periode

【问题讨论】:

    标签: mysql sql-server sql-server-2008 date


    【解决方案1】:

    你错过了检查where子句中的条件

    WHERE  Dateadd(MONTH,Datediff(MONTH,-1,Getdate())-1,-1) = somedatecolumn -- Missed 
    

    【讨论】:

    • 嗯,我需要结果来显示上个月的数据,例如。今天是 2015 年 3 月 17 日,当我们运行报告时,它应该显示截至 2015 年 2 月的数据。当我运行语句 'Dateadd(MONTH,Datediff(MONTH,-1,Getdate())-1,-1) ',它给了我一个 28/Feb/2015 的值,所以我想在 where 语法中使用它。你能帮忙解决这个问题吗?
    【解决方案2】:

    where DATEADD(MONTH,DATEDIFF(MONTH,-1,GETDATE())-1, -1)

    真的没有任何意义。您将需要评估或等同于另一个值。例如,

    where dbo.mytable.mycolumn = DATEADD(MONTH,DATEDIFF(MONTH,-1,GETDATE())-1, -1)

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多