我有一张类似于下面设计的表格:
Id Code Name short name Date1 date2 market
1 12A AAAA1 a1 2012-03-27 2012-03-27 90
2 13A AAAA2 a2 2012-03-28 2012-03-28 90
3 14A AAAA3 a3 NULL NULL 32
4 15A AAAA4 a4 NULL NULL 32
我必须构建一个查询,这样当我选择代码时,代码与市场90一样,select应该是这样一种方式,即Date1>系统日期和Date2> Date1和其他市场没有标准适用于选择。
到目前为止我已构建了查询,但我不知道如何在市场为90时指定where子句。
SELECT A.Id, B.Name [Name], B.Code [Code], Date1 [Date1], Date2 [Date]2, C.Code[Market]
FROM dbo.fn_idlisting(@System_Date) A
INNER JOIN code B ON A.Id = B.Id
LEFT OUTER JOIN Market C ON B.Market_Id = C.Market_Id
WHERE (Date1 <= @systemDate) AND (Date2 >= Date1)
我觉得如何在没有任何where子句的情况下选择市场32的其他代码很困难。
答案 0 :(得分:1)
你能这样试试吗
SELECT A.Id, B.Name [Name], B.Code [Code], Date1 [Date1], Date2 [Date]2, C.Code[Market]
FROM dbo.fn_idlisting(@System_Date) A
INNER JOIN code B ON A.Id = B.Id
LEFT OUTER JOIN Market C ON B.Market_Id = C.Market_Id
WHERE (Date1 > @System_Date and Date2 >Date1 or c.Code != 90)
答案 1 :(得分:0)
使用CASE
语句包含您的Market = 90
逻辑,如下所示:
SELECT
A.Id,
B.Name [Name],
B.Code [Code],
Date1 [Date1],
Date2 [Date2],
C.Code [Market]
FROM
dbo.fn_idlisting(@System_Date) A
INNER JOIN code B
ON A.Id = B.Id
LEFT OUTER JOIN Market C
ON B.Market_Id = C.Market_Id
WHERE
Date1 <= CASE WHEN C.Code = 90 THEN @systemDate ELSE Date1 END
AND
Date2 >= CASE WHEN C.Code = 90 THEN Date1 ELSE Date2 END
答案 2 :(得分:0)
我从您的问题中了解到,您的表名是fn_idlisting,而您只有一个表。请尝试以下。
注意:我没有使用等于你只提及&gt;和&lt;对于date1和date2,如果想要更改日期范围标准,可以使用它。
select * from fn_idlisting where market=90 and date1>cast(SYSDATETIME() as DATE) and date2>date1 union select * from fn_idlisting where market<>90