为什么我把这个 "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
我对数据库不熟悉。
我在 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