2013-04-13 2 views
2

На SQL ниже он находит «плохие строки» на моем листе excel и копирует их в другую таблицу. Это работает отлично. Однако под каждым предложением OR ниже я хочу сделать столбец «rejectionreason» = некоторый текст ошибки. Так, например, если eventID был = 0, переместите строку в таблицу, а также обновите столбец «rejectionreason» в текст «Ошибка eventID равнялась 0».SQL-скрипт для добавления причины отклонения

Мне также нужно сделать аналогичное для всех остальных инструкций ИЛИ ниже.

Как я могу это сделать

SQL

REPLACE INTO InvalidBaseDataTable SELECT * FROM BaseDataTable where dateTime = '0000-00-00 00:00:00'   

    OR eventId = 0       

    OR ueType = 0       

    OR eventId NOT IN (SELECT DISTINCT(eventId) FROM EventCauseTable) 

    OR causeCode < (SELECT MIN(causeCode) FROM EventCauseTable) 

    OR causeCode > (SELECT MAX(causeCode) FROM EventCauseTable) 

    OR ueType NOT IN (SELECT DISTINCT(tac) FROM UeTable) 

    OR 



     (eventId NOT IN (SELECT DISTINCT(eventId) FROM EventCauseTable) 

     AND 

     causeCode NOT IN (SELECT DISTINCT(causeCode) FROM EventCauseTable)) 

ответ

3

Вы могли бы попробовать что-то вроде:

REPLACE INTO InvalidBaseDataTable 
SELECT *, CASE 
    WHEN dateTime = '0000-00-00 00:00:00' THEN 'datetime equal to 0' 
    WHEN eventId = 0 THEN 'eventId equal to 0' 
    WHEN ueType = 0 THEN 'ueType equal to 0' 
    ELSE 'All good' 
END AS rejectionreason 
FROM BaseDataTable WHERE dateTime = '0000-00-00 00:00:00'   
OR eventId = 0 
OR ueType = 0 
OR eventId NOT IN (SELECT DISTINCT(eventId) FROM EventCauseTable) 
OR causeCode < (SELECT MIN(causeCode) FROM EventCauseTable) 
OR causeCode > (SELECT MAX(causeCode) FROM EventCauseTable) 
OR ueType NOT IN (SELECT DISTINCT(tac) FROM UeTable) 
OR (eventId NOT IN (SELECT DISTINCT(eventId) FROM EventCauseTable) 
    AND 
    causeCode NOT IN (SELECT DISTINCT(causeCode) FROM EventCauseTable)) 
2

Я хотел бы сделать что-то вроде этого.

Тем более, что вам нужно будет только один раз провести тест, а не один раз, чтобы найти проблему, а затем повторить тот же тест, чтобы найти причину.

select * 
from (select id, 
       case when dateTime = '0000-00-00 00:00:00' then 'dateTime = 00000-00-00 00:00:00' else 
       case when eventId = 0 or ueType = 0 then 'eventId or ueType = 0' else 
       case when eventId not in (SELECT DISTINCT(eventId) FROM EventCauseTable) then 'eventId not in EventCauseTable' else 
       case when testMe2 not in (select value from valueList) then 'Value in testMe2 is not in Values' else null end end end end end result 
     from testThis) x 
where result is not null; 
Смежные вопросы