Оператор Case с условием where в SQL

Я пытаюсь написать инструкцию CASE в SQL.

Структура БД выглядит следующим образом:

==============================================
tender_id  |  file_no  |   subject
==============================================

150001         16/41        Against Shipment
150005         16/42        Pending
150008         16/43        Shipment Clause
1500081        16/43        NULL or Empty
1500082        16/43        NULL or Empty
==============================================

Я пытаюсь написать заявление по делу, которое показывает тему. Критерий если субъектNULL or EMPTY, то он должен выбрать субъект, где субъект вводится с критериями where file_no = file_no. В этом случае tender_id 1500081 и 1500082 должны принимать тему как ‘предложение отгрузки’, так как file_no этих совпадений.

Может кто-нибудь помочь мне в этом?

2 ответа

  1. Вы можете решить эту проблему с помощью самостоятельного соединения:

    SELECT t1.tender_id, t2.file_no,
      CASE t1.subject 
      WHEN 'NULL or Empty' THEN t2.subject 
      ELSE t1.subject END AS subject
    FROM YourTableName AS t1
    JOIN YourTableName AS t2 
      ON (t2.file_no = t1.file_no AND t2.subject <> 'Null or Empty');
    

    Предполагается, что для каждого file_no задана только одна строка с темой.

    Update: я создал SQLFiddle для демонстрации этого запроса. Это удовлетворяет описанной вами проблеме, как я ее понимаю.

  2. Sqlfiddle здесь

    Я предположил, что первые два столбца, чтобы быть intвы можете изменить его в соответствии с вашей базой данных и редактировать соответственно.

    Предполагая, что вы всегда будете иметь file_noв таблице вы ищете file_noвсегда, который даст вам желаемый результат

    SELECT subject
    FROM [table_name]
    WHERE file_no = (SELECT file_no FROM [table_name] where tender_id = [required_tender_id])
    AND subject IS NOT NULL;