为什么我把这个 "Incorrect syntax near the keyword 'between'" 变成一个 SQL 之间使用的服务器查询?

Why I obtain this "Incorrect syntax near the keyword 'between'" into a SQL Server query that use between?

我对数据库不熟悉。

我在 Microsoft SQL 服务器上工作,我在尝试执行此查询时遇到了一些问题,该查询在键盘和 select 日期范围之间使用。

我的查询是:

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

如您所见,我正在使用 2 between 作为 2 where conditions 的过滤器,如下所示:

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

问题是 SQL 服务器给我以下错误信息:

 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]

我错过了什么?我该如何解决这个问题?

您错过了 between 之前的列名称。

语法是<column_name> between <value> and <other_value>

你必须说明什么BETWEEN,所以我猜:

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

你忘记在between之前写列名了。请检查更新后的查询

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 之前指定了日期列。请参考这个,

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