sql子查询如何获得所需的值

时间:2014-06-30 10:32:09

标签: 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 ....

我收到一条错误:子查询返回多行。

如果我的支票ID与临时表格检查ID匹配,我该如何实现,然后只将该存款添加到付款中。

我正在使用SQL Server 2005。

由于

2 个答案:

答案 0 :(得分:2)

我想你想加入这些表:

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

这将为每张支票增加存款金额的绝对值。如果@deposit中没有相应的记录,则付款不会发生变化。

答案 1 :(得分:0)

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

这一行会返回多行,因此无法在付款中添加多笔金额

您可以使用聚合

SELECT sum(abs(deposit)) FROM @deposit

或添加一些条件

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