SQL: Дата обновления условия - PullRequest
0 голосов
/ 26 мая 2020

Я хочу обновить свой столбец в зависимости от дат из двух разных таблиц. Ниже мой запрос

UPDATE T_TRN_DEAL_DETAILS SET MATURITY_DT  = 
 (CASE
  WHEN (Select top 1 INS.INVOICE_DUE_DT as invoice_date  from T_TRN_INVOICE_DETAILS IND
 INNER jOIN T_TRN_INVOICE_SUMMARY INS on IND.INVOICE_ID=INS.INVOICE_ID
 where IND.DEAL_ID ='1234'
 order by INS.INVOICE_DUE_DT desc ) > (Select DEAL_ID,MATURITY_DT as invoice_date from T_TRN_DEAL_DETAILS WHERE DEAL_ID ='1234')  
 THEN (Select top 1 INS.INVOICE_DUE_DT as invoice_date  from T_TRN_INVOICE_DETAILS IND
 INNER jOIN T_TRN_INVOICE_SUMMARY INS on IND.INVOICE_ID=INS.INVOICE_ID
 where IND.DEAL_ID ='1234'
 order by INS.INVOICE_DUE_DT desc) 
 ELSE (Select DEAL_ID,MATURITY_DT as invoice_date from T_TRN_DEAL_DETAILS WHERE DEAL_ID ='DL18111213586')
 END )  
 WHERE DEAL_ID ='1234'

Но я получаю ошибку ниже

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

Хотя я просто сравниваю две даты.

1 Ответ

1 голос
/ 26 мая 2020

Ошибка очевидна:

подзапрос должен возвращать только один столбец, но в вашем прерывании ELSE вы написали следующее:

(Select DEAL_ID,MATURITY_DT as invoice_date 
from T_TRN_DEAL_DETAILS WHERE DEAL_ID ='DL18111213586')

Итак, вы пытаетесь вернуть два столбца. Вы должны удалить столбец DEAL_ID, потому что ваше MATURITY_DT - это поле, которое вы хотите использовать для обновления своей основной таблицы.

Та же ошибка, которую вы сделали в первой ветке при попытке сравнить подзапросы (> ), где второй подзапрос возвращает два столбца вместо одного.

(Select DEAL_ID,MATURITY_DT as invoice_date
from T_TRN_DEAL_DETAILS WHERE DEAL_ID ='1234') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...