0

私はこのクエリを持っています

SELECT Calendar."Production Week" FROM Opex 
WHERE 
(
Calendar."Production Week" BETWEEN  VALUEOF("LAST_WEEK")-200 
AND  
VALUEOF("LAST_WEEK")
) 
OR 
(
(
(MOD(Calendar."Production Week", 100) = 1) 
OR 
(MOD(Calendar."Production Week", 100) = 13) 
OR 
(MOD(Calendar."Production Week", 100) = 26) 
OR 
(MOD(Calendar."Production Week", 100) = 39) 
OR 
(MOD(Calendar."Production Week", 100) = 52)   
)  
AND 
(Calendar."Production Week" <=
VALUEOF("LAST_WEEK"))
) 
ORDER BY Calendar."Production Week" DESC

それでは私の質問ですが、同じ結果になるため、このクエリを特にMOD関数よりも短くする方法は他にありますか?200639、200652、200713、2007 26、200739 ...など?前もって感謝します。

4

3 に答える 3

1
MOD(Calendar."Production Week", 100) IN (1,13,26,39,52) 

それで十分ですか?

于 2011-11-15T10:12:06.120 に答える
0

ORのチェーンをIN句に変更できます

MOD(Calendar."Production Week", 100) in (1,13,26,39,52)
于 2011-11-15T10:12:43.047 に答える
0
SELECT Calendar."Production Week" FROM Opex
WHERE (
     Calendar."Production Week" BETWEEN VALUEOF("LAST_WEEK")-200 AND VALUEOF("LAST_WEEK")
)
OR
(
     (
        (MOD(Calendar."Production Week", 100) in (1, 13, 26, 39, 52)
     )
     AND  (Calendar."Production Week" <= VALUEOF("LAST_WEEK"))
)
ORDER BY Calendar."Production Week" DESC
于 2011-11-15T10:14:06.830 に答える