为什么我会在使用between的SQL Server查询中获取“关键字'between'附近的语法不正确”?
我不熟悉数据库 我正在使用Microsoft SQL Server,尝试执行此查询时遇到一些问题,该查询使用键盘之间的间隔来选择日期范围 我的问题是:为什么我会在使用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
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