Есть ли другой способ сократить эту функцию SQL, особенно функцию MOD? - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть этот запрос

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 ... и т.д. Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 15 ноября 2011
MOD(Calendar."Production Week", 100) IN (1,13,26,39,52) 

Этого достаточно?

0 голосов
/ 15 ноября 2011
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
0 голосов
/ 15 ноября 2011

Вы можете изменить цепочку ИЛИ на предложение IN

MOD(Calendar."Production Week", 100) in (1,13,26,39,52)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...