2016-09-23 68 views
0

我需要使用給定年份和月份的範圍從表中選擇記錄我正在使用此SQL Server語句,如果我使用不同的年份作爲開始年份,那麼該語句工作正常,但如果我使用同一年和不同的月份不起作用。使用年份和月份字段選擇記錄 - SQL Server

SELECT TOP 1000 [Clave Titular Cedula] 
     ,[Clave Cifcod] 
     ,[Clave Anio corte historico] 
     ,[Clave Mes de corte historico] 
     ,[Clave Tipo de tarjeta] 
     ,[ClaveCodigo grupo inf#promocio] 
     ,[Clave Codigo subgrupo inf#prom#] 
     ,[Cant# Compras] 
     ,[Valor Compras] 
    FROM [Prueba].[dbo].[Gasto] 
    where ([Clave Titular Cedula] = '0917947160' and [Clave Cifcod] = '284849' and [ClaveCodigo grupo inf#promocio] = '05') 
and (([Clave Anio corte historico] = '2016' and [Clave Mes de corte historico] >= 02) 
    or ([Clave Anio corte historico] > '2016' and [Clave Anio corte historico] < '2016') 
    or ([Clave Anio corte historico] = '2016' and [Clave Mes de corte historico] <= 09)) 

例如,這將返回事件的月份01而不是月份02的記錄作爲起始月份。

任何建議將不勝感激。

由於提前,

鮑里斯塔拉

+0

您的最後一項或聲明允許所有在2016年的月份少於10個月返還 - 第1個月是其中的一部分。你需要重構你的查詢。如果你正在尋找一個範圍 - 嘗試使用之間的月 – MageeWorld

+0

除了'([Clave Anio corte historico]>'2016'和[Clave Anio corte historico] <'2016')' - 什麼是重點這在你的查詢?沒有記錄可以同時滿足這兩個標準 - 設置Clave Anio Corte Historice = 2016和Clave Mes de corte historico BETWEEN 2和9 – MageeWorld

回答

0

您可以使用此,通過排除所有錯誤的選項。我prefere你結合的年份和月份,如:YYYY-MM

SELECT * FROM表WHERE NOT(FROM_DATE < #RangeEnd或TO_DATE> #RangeStart)

希望幫助

0

您的查詢簡化爲:

SELECT TOP 1000 
    [Clave Titular Cedula] 
    ,[Clave Cifcod] 
    ,[Clave Anio corte historico] 
    ,[Clave Mes de corte historico] 
    ,[Clave Tipo de tarjeta] 
    ,[ClaveCodigo grupo inf#promocio] 
    ,[Clave Codigo subgrupo inf#prom#] 
    ,[Cant# Compras] 
    ,[Valor Compras] 
FROM 
    [Prueba].[dbo].[Gasto] 
where 
    ([Clave Titular Cedula] = '0917947160') 
    and ([Clave Cifcod] = '284849') 
    and ([ClaveCodigo grupo inf#promocio] = '05') 
    and ([Clave Anio corte historico] = '2016') 
    and ([Clave Mes de corte historico] between 02 and 09) 
相關問題