2014-01-16 3 views
0

жаль, что я не знаю, как еще поставить название в слова. Ниже мой код.В SQL-запросе, если условие существует, выберите это условие над чем-либо еще

SELECT DISTINCT association.NamaBadan, 
    (
     CASE 
      WHEN type = 5 
       THEN 'Batal' 
      WHEN NamaBadan LIKE '%BATAL%' 
       THEN 'Batal' 
      ELSE 'Sah' 
      END 
     ) AS STATUS 
FROM association 
LEFT JOIN tindakan 
    ON association.assoc_id = tindakan.assoc_id 

возвращает таблицу ниже:

query result

Как вы можете видеть, что повторяют результаты на «perseketuan газона миски Малайзии» и другой результат на следующей колонке, где некоторые из газонных чаш являются «сашими», а некоторые «батальны».

Это связано с тем, что в таблице tindakan имеется несколько записей. Записи с типом, отличным от 5. Например, в таблице tindakan есть две записи на лужайках. Один с типом 5, другой с типом 4.

Поскольку в моем запросе указано, что тип 5 = Batal и другие = Sah, запрос выводит как статус для газонных чаш.

Как выбрать «batal» над «sah».

Что-то вроде

IF условие типа = 5 СУЩЕСТВУЕТ, а затем выберите это условие.

ответ

0

решаемые его следующим запросом

SELECT DISTINCT association.NamaBadan, 
    (
     CASE 
      WHEN type = 5 
       THEN 'Batal' 
      WHEN NamaBadan LIKE '%BATAL%' 
       THEN 'Batal' 
      ELSE 'Sah' 
      END 
     ) AS STATUS 
FROM association 
LEFT JOIN tindakan 
    ON (association.assoc_id = tindakan.assoc_id AND tindakan.type = 5) 
+0

Это не приоритет «Batal», просто ничего не выводит ничего в поле статуса, кроме «Batal», и только после этого когда он печатает 5. – Kickstart

0

Вы можете попробовать либо предложение Group by, либо предложение order by, чтобы отсортировать результаты для вас.

, то вы можете попробовать это:

SELECT association.NamaBadan, 
    (
     CASE 
      WHEN type = 5 
       THEN 'Batal' 
      WHEN NamaBadan LIKE '%BATAL%' 
       THEN 'Batal' 
      ELSE 'Sah' 
      END 
     ) AS STATUS 
FROM association 
WHERE STATUS LIKE '%Batal%' 
LEFT JOIN tindakan 
    ON association.assoc_id = tindakan.assoc_id 

Надеется, что это помогает.

+0

Это не группирования или упорядочивания, что я хочу. Я хочу, чтобы он отображал только один из статусов. Например, в табличной ассоциации состояние лужайки - это lulus, так как в его названии нет% BATAL%. просто лужайки. но, однако, газонные чаши также существуют в таблице tindakan, где ее статус в Batal. Как разрешить запрос выбрать Batal over Sah. – mfmz

0

Возможно просто использовать GROUP BY с MIN на статус: -

SELECT association.NamaBadan, 
    MIN(
     CASE 
      WHEN type = 5 
       THEN 'Batal' 
      WHEN NamaBadan LIKE '%BATAL%' 
       THEN 'Batal' 
      ELSE 'Sah' 
      END 
     ) AS STATUS 
FROM association 
LEFT JOIN tindakan 
    ON association.assoc_id = tindakan.assoc_id 
GROUP BY association.NamaBadan 
+0

Я думаю, что у вас есть мой вопрос не так. Я отредактировал вопрос, чтобы уточнить, в чем моя проблема. в обеих таблицах есть две аналогичные записи. но один со статусом = sah another = batal. как я могу сделать запрос, выберите batal over sah. – mfmz

+0

Вот что делает этот запрос. Он выбирает ассоциацию.NamaBadan и значение MIN для STATUS (т.е. Batal меньше Sah) для этих строк – Kickstart

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