2013-09-03 7 views
0

Я пытаюсь поставить оператор if, например, если заголовок это, исключить эти имена файлов else filenames = bla bla. но явно не работает, какие-то идеи?Если условие в запросе

SELECT 
    SUM(streamlength) 
FROM 
    files, 
    filemetadata 
where 
    files.id = filemetadata.id 
    AND title like 'abc' 
    and (Time > '2013-01-01' and Time < '2013-08-06') 
    and 
    if((title like 'abc' AND Time > '2013-02-22'), 
    (filename NOT like '%20121129%' 
    AND filename NOT like '%20121204%' 
    AND filename NOT like '%20121214%' 
    AND filename NOT like '%20121219%' 
    AND filename NOT like '%20130109%' 
    AND filename NOT like '%20130114%'),filename like 
        '%1111111%') 
+1

вы можете попробовать [case statement] (http://msdn.microsoft.com/en-us/library/ms181765.aspx) для этого. 'where case, когда title = 'this', а затем filename else null end = filename или ...' this way, если 'title = 'this'', то' filename = filename', и запись включена. если 'title <> 'this'', то' null <> filename', и строка исключена. –

ответ

3

Если я правильно читал намерение SQL:

SELECT 
SUM(streamlength) 
FROM 
files, 
filemetadata 
where 
files.id = filemetadata.id 
AND title like 'abc' 
and (Time > '2013-01-01' and Time < '2013-08-06') 
and 
(
    ( 
    (title like 'DE-PIAE78' AND Time > '2013-02-22') 
    AND 
    (filename NOT like '%20121129%' 
    AND filename NOT like '%20121204%' 
    AND filename NOT like '%20121214%' 
    AND filename NOT like '%20121219%' 
    AND filename NOT like '%20130109%' 
    AND filename NOT like '%20130114%') 
) 
    OR 
    (
    NOT ((title like 'DE-PIAE78' AND Time > '2013-02-22')) 
    AND (filename like '%1111111%') 
) 
) 

Это соответствует разным именам файлов в зависимости от того (title like 'DE-PIAE78' AND Time > '2013-02-22') является истинным или ложным.

Некоторые варианты SQL поддерживают оператор IF, но не все это делают.

+0

это, наверное, то, что нужно было .. это выглядит хорошо. –

+0

Ах, здесь есть ошибка, которая не приведет к возврату строк. «Title like» abc'' конфликтует с «title like» DE-PIAE78'' – ash

Смежные вопросы