#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'
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