2

以下のSQLでは、Excelシートで「不良行」が見つかり、それらを別のテーブルにコピーします。これは完璧に機能します。ただし、以下の各ORステートメントの下で、列「拒否理由」=エラーテキストを作成したいと考えています。たとえば、eventID が = 0 の場合、行をテーブルに移動しますが、列 "rejectionreason" をテキスト "Error the eventID was equals to 0" に更新します。

以下の他のすべての OR ステートメントについても、同様の操作を行う必要があります。

これどうやってするの

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))
4

2 に答える 2

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))
于 2013-04-13T16:04:32.490 に答える
2

私はこのようなことをします。

特に、問題を見つけるためにテストを 1 回だけ実行し、原因を見つけるためだけに同じテストをもう一度実行する必要があるためです。

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;
于 2013-04-13T16:12:15.430 に答える