2017-09-14 182 views
0

我想创建一个SQL语句,通过筛选日期范围的同一行中的多个日期字段来选择记录任何日期字段属于提供的开始或结束数据,那么它应该从下面的表中显示 实际上,我打算在Crystal中编写SQL命令,因此StartDate和EndDate以及Country和City的值将提供给此SQL语句。所以,此时此刻不要担心水晶报告。它只是如何在SQL Select语句中处理这个问题? 任何想法???SQL来选择范围内的多个日期字段

参数为:起始日期和结束日期,国家和/或城市

SQL:

Select * from Table where 
ActualStart in StartDate and EndDate 
Or 
ActualEnd in StartDate and EndDate 
or 
ProjectedStart in StartDate and EndDate 
or ProjectedEnd in StartDate and EndDate 
AND 
County = CountyParam AND (if Not Null(CityParam) then City = CityParam) 

DATA:

WORKID Country CITY  Cost ActualStart ActualEnd ProjectedStart ProjectedEnd 
18112 US  BOSTON 0  NULL   NULL  4/25/2017  NULL 
18181 US  BOSTON 566.76 6/1/2016  6/6/2017 6/6/2017  NULL 
18183 GERMANY STUTTGART 0  NULL   NULL  6/6/2017  NULL 
18184 GERMANY MUNICH  0  NULL  6/6/2017 6/6/2017  NULL 
18185 INDIA HYDERABAD 0  4/1/2015  NULL  7/6/2017  NULL 
18186 CANADA TORONTO 0  NULL   NULL  4/6/2017  NULL 
18187 CANADA TORONTO 0  1/1/2016  NULL  3/6/2017  NULL 
18188 CANADQ CALGARY 0  NULL   NULL  6/6/2017 6/6/2018 
18189 US  BOSTON  0  NULL   NULL  6/6/2017  NULL 
18190 US  CHICAGO 1429.76 NULL  6/7/2017 6/7/2017  NULL 
18191 US  NEWYORK 0  NULL   NULL  8/7/2017  NULL 
+1

只是用'BETWEEN'即'WHERE(ActualStart BETWEEN起始日期日期和结束日期)或(ActualEnd之间的起始日期日期和结束日期)或...' –

+0

如果起始日期或结束日期可以为NULL,使用COALESCE(起始日期,“1900- 01-01')为EndDate的StartDate和COALESCE(EndDate,'2100-01-01')。 –

+0

似乎有点奇怪。你是否打算排除长期运行的物品?在请求的开始日期之前的开始日期和在请求的结束日期之后的结束日期。 – Mic

回答

0

谢谢你的答案 我能解决这个问题通过使用语法和合并函数,然后最后使用Date参数(From和To Dat)向Crystal添加SQL命令E)。 对于处理Country和City的逻辑,我使用Crystal中的Select记录将此语句添加为以前的SQL语句的结束语句。现在它工作正常。 感谢