-4

我正在寻找以下解决方案:

  1. 进入users表格并找到在网站上列出项目的用户。在此users表中,没有关于拍卖的列。相反,它accounts通过一个键连接到一个表(在 中accounts,该列称为user),所以我用它来加入它们:

    SELECT users.id ,accounts.user FROM users
    LEFT JOIN accounts
    ON users.id = accounts.user
    WHERE accounts.user IS NOT NULL 
    
  2. 从这些 ID(列出拍卖物品的用户)中,我需要找到他们的帐户余额。这也在accounts表中。余额包含在名为 的列中operation_amount。我还有另一列名为operation_type,它描述了用户的余额是正数还是负数。例如,如果operation_type = 1,他有负余额,而如果operation_type = 2,他有正余额。

现在我有另一个名为的表tmpinvoice,其中有一列名为amount. 这显示了用户需要向站点管理员支付多少费用。

鉴于此,我需要计算他总共必须支付多少。例如,如果用户有 200 美元的余额,我需要根据operation_type.

想象一个场景balance - fees = total,比如200 - 0.25 = ?。在这种情况下,计算的金额将根据200是正数还是负数而有所不同。

我希望这是一个更好的描述。

4

5 回答 5

0

我不确定这是否是你想要的,但让我试试:

SELECT  [user],
        account_balance + TotalAmount
FROM    accounts A
        JOIN
        (
            SELECT user, 
                    SUM(amount) AS TotalAmount
            FROM   tmpinvoice 
        ) T
       ON   T.[user] = A.[user]
于 2013-08-02T07:00:59.643 回答
0

MSSQL IF 文档

处理变量中的数量和操作以便于阅读。

IF @OperationType = 1
BEGIN
 SET @Amount = @Amount  - 0.25
END
ELSE
BEGIN
 SET @Amount = @Amount + 0.25
END
于 2013-08-02T07:02:03.787 回答
0

听起来您想弄清楚用户的总余额是多少。例如,如果用户有 200 的负余额并欠网站运营商 0.50,那么她欠的总金额为 -200.50,即 -200 -.50。如果它是正数,那么公司欠她 199.50 是 200 - 0.50。我做对了吗?您要查找的主要部分是以下查询中的 CASE 语句。此解决方案适用于 SQL Server。许多其他数据库具有类似的 CASE 语句语法,但这适用于 SQL Server,如您在 SQL Fiddle 链接上所见。

我让事情变得简单,并假设每个用户只有 1 个帐户,每个用户只有 1 个 tmpinvoice。由于您在 WHERE 子句中指定了“accounts.user IS NOT NULL”,因此我将 Left Join 更改为 INNER JOIN,这将完成同样的事情。

SELECT 
 users.id,
 accounts.user_id,
 (CASE WHEN accounts.operation_type=1 THEN accounts.operation_amount * -1 ELSE accounts.operation_amount END) - tmpinvoice.amount AS total
FROM users
INNER JOIN accounts ON 
 users.id = accounts.user_id
LEFT JOIN tmpinvoice ON
 users.id = tmpinvoice.user_id

如果每个用户超过 1 个 tmpinvoice,您可以执行以下操作。

SELECT 
 users.id,
 accounts.user_id,
 MAX(CASE WHEN accounts.operation_type=1 THEN accounts.operation_amount * -1 ELSE accounts.operation_amount END) - SUM(COALESCE(tmpinvoice.amount,0.0)) AS total
FROM users
INNER JOIN accounts ON 
 users.id = accounts.user_id
LEFT JOIN tmpinvoice ON
 users.id = tmpinvoice.user_id
GROUP BY
 users.id,
 accounts.user_id

有关工作示例,请参阅SQL Fiddle

于 2013-08-02T17:25:27.197 回答
0

是的,你可以if else在 sql 中使用,这是我用于 mysql 的语法

SELECT IF(condition, true,false) from tbl
于 2013-08-02T07:02:22.660 回答
0

可能你正在寻找case表达

select case 
         when opperation_type = 1 then opperation_amount - 0.25 
         when opperation_type = 2 then opperation_amount + 0.25
       end
from tab
于 2013-08-02T07:03:25.853 回答