подзапрос sql как получить желаемое значение

#mysql #sql

#mysql #sql

Вопрос:

 DECLARE @deposit TABLE(
  checks VARCHAR(MAX),
  deposit VARCHAR(MAX)
)

INSERT INTO @deposit
SELECT CheckID
     , Total
FROM
  DISCOUNT_DETAIL
  INNER JOIN CHECK_DETAIL
    ON DISCOUNT_DETAIL.CheckDetailID = CHECK_DETAIL.CheckDetailID
WHERE
  DISCOUNT_DETAIL.DscntID = '98'
  

temptable

 SELECT CASE WHEN CHECK_DETAIL.CheckID IN (SELECT checks
                                          FROM @deposit) 
THEN CHECKS.Payment   (SELECT abs(deposit) FROM @deposit)
                  ELSE
  CHECKS.Payment
FROM ....
  

Я получил сообщение об ошибке: подзапрос возвращает более одной строки.

Как мне добиться, чтобы мой идентификатор проверки совпадал с идентификатором проверки временной таблицы, а затем добавлял только этот депозит к оплате.

Я использую SQL server 2005.

Спасибо

Ответ №1:

Я думаю, вы хотите объединить таблицы вместе:

 select c.payment   coalesce(abs(d.deposit), 0)
from checks c left outer join
     @deposit d
     on c.CheckId = d.checks
     . . .
  

Это добавит абсолютное значение суммы депозита к каждому чеку. Если в нем нет соответствующей записи, @deposit то платеж не меняется.

Ответ №2:

 THEN CHECKS.Payment   (SELECT abs(deposit) FROM @deposit)
  

Этот возвращает несколько строк, поэтому невозможно добавить несколько сумм к вашему платежу

Вы можете либо использовать агрегацию

 SELECT sum(abs(deposit)) FROM @deposit
  

или добавьте какое-нибудь условие

 SELECT abs(deposit) FROM @deposit where user_id=12345