为什么我会在使用between的SQL Server查询中获取“关键字'between'附近的语法不正确”?

为什么我会在使用between的SQL Server查询中获取“关键字'between'附近的语法不正确”?,sql,sql-server,database,sql-server-2008,rdbms,Sql,Sql Server,Database,Sql Server 2008,Rdbms,我不熟悉数据库 我正在使用Microsoft SQL Server,尝试执行此查询时遇到一些问题,该查询使用键盘之间的间隔来选择日期范围 我的问题是: select NumeroPolizza ,sum(v.Ctv) as Ctv_RI from ( select r.NumeroPolizza,SUM(r.ImportoPrestazioneIniziale) as Ctv from Prestazione r with(nolock) where r.NumeroP

我不熟悉数据库

我正在使用Microsoft SQL Server,尝试执行此查询时遇到一些问题,该查询使用键盘之间的间隔来选择日期范围

我的问题是:

select NumeroPolizza ,sum(v.Ctv) as Ctv_RI
from (
    select r.NumeroPolizza,SUM(r.ImportoPrestazioneIniziale)  as Ctv
    from Prestazione r with(nolock)
    where r.NumeroPolizza in (select ID from Polizza p with(nolock) where TipoSistemaProvenienzaID=8)
    --and r.DataInizio <= '2015-12-31'
    and between '2016-01-01' and '2016-04-01'
    group by r.NumeroPolizza

    UNION

    select NumeroPolizza,SUM(ImportoRivalutazioneDaPiano+ImportoRivalutazioneEstemporaneo)as  Ctv
    from Rivalutazione with(nolock)
    where NumeroPolizza in (select ID from Polizza p with(nolock) where TipoSistemaProvenienzaID=8)
    --and DAtaDecorrenza <= '2015-12-31'
    and between '2016-01-01' and '2016-04-01'
    group by NumeroPolizza
) v
group by NumeroPolizza
order by NumeroPolizza
问题是SQL Server向我发送了以下错误消息:

 11:30:36  [SELECT - 0 row(s), 0.000 secs]  [Error Code: 156, SQL State: S0001]  Incorrect syntax near the keyword 'between'.
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec  [0 successful, 0 warnings, 1 errors]

我错过了什么?如何解决此问题?

您之前错过了列名

语法介于和之间

您必须说明介于之间的内容,因此我猜:

and DAtaDecorrenza between '2016-01-01' and '2016-04-01'

你忘记写列名了。请检查更新的查询

select NumeroPolizza ,sum(v.Ctv) as Ctv_RI
    from (
        select r.NumeroPolizza,SUM(r.ImportoPrestazioneIniziale)  as Ctv
        from Prestazione r with(nolock)
        where r.NumeroPolizza in (select ID from Polizza p with(nolock) where TipoSistemaProvenienzaID=8)
        --and r.DataInizio <= '2015-12-31'
        and r.DataInizio between '2016-01-01' and '2016-04-01'
        group by r.NumeroPolizza

        UNION

        select NumeroPolizza,SUM(ImportoRivalutazioneDaPiano+ImportoRivalutazioneEstemporaneo)as  Ctv
        from Rivalutazione with(nolock)
        where NumeroPolizza in (select ID from Polizza p with(nolock) where TipoSistemaProvenienzaID=8)
        --and DAtaDecorrenza <= '2015-12-31'
        and r.DataInizio between '2016-01-01' and '2016-04-01'
        group by NumeroPolizza
    ) v
    group by NumeroPolizza
    order by NumeroPolizza

我已在BETWEEN之前指定了datecolumn。请看这个,

SELECT NumeroPolizza
    ,sum(v.Ctv) AS Ctv_RI
FROM (
    SELECT r.NumeroPolizza
        ,SUM(r.ImportoPrestazioneIniziale) AS Ctv
    FROM Prestazione r WITH (NOLOCK)
    WHERE r.NumeroPolizza IN (
            SELECT ID
            FROM Polizza p WITH (NOLOCK)
            WHERE TipoSistemaProvenienzaID = 8
            )
        --and r.DataInizio <= '2015-12-31'
        AND r.DataInizio BETWEEN '2016-01-01'
            AND '2016-04-01'
    GROUP BY r.NumeroPolizza

    UNION

    SELECT NumeroPolizza
        ,SUM(ImportoRivalutazioneDaPiano + ImportoRivalutazioneEstemporaneo) AS Ctv
    FROM Rivalutazione WITH (NOLOCK)
    WHERE NumeroPolizza IN (
            SELECT ID
            FROM Polizza p WITH (NOLOCK)
            WHERE TipoSistemaProvenienzaID = 8
            )
        --and DAtaDecorrenza <= '2015-12-31'
        AND DAtaDecorrenza BETWEEN '2016-01-01'
            AND '2016-04-01'
    GROUP BY NumeroPolizza
    ) v
GROUP BY NumeroPolizza
ORDER BY NumeroPolizza
SELECT NumeroPolizza
    ,sum(v.Ctv) AS Ctv_RI
FROM (
    SELECT r.NumeroPolizza
        ,SUM(r.ImportoPrestazioneIniziale) AS Ctv
    FROM Prestazione r WITH (NOLOCK)
    WHERE r.NumeroPolizza IN (
            SELECT ID
            FROM Polizza p WITH (NOLOCK)
            WHERE TipoSistemaProvenienzaID = 8
            )
        --and r.DataInizio <= '2015-12-31'
        AND r.DataInizio BETWEEN '2016-01-01'
            AND '2016-04-01'
    GROUP BY r.NumeroPolizza

    UNION

    SELECT NumeroPolizza
        ,SUM(ImportoRivalutazioneDaPiano + ImportoRivalutazioneEstemporaneo) AS Ctv
    FROM Rivalutazione WITH (NOLOCK)
    WHERE NumeroPolizza IN (
            SELECT ID
            FROM Polizza p WITH (NOLOCK)
            WHERE TipoSistemaProvenienzaID = 8
            )
        --and DAtaDecorrenza <= '2015-12-31'
        AND DAtaDecorrenza BETWEEN '2016-01-01'
            AND '2016-04-01'
    GROUP BY NumeroPolizza
    ) v
GROUP BY NumeroPolizza
ORDER BY NumeroPolizza