我正在寻找以下解决方案:
进入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
从这些ID(已列出拍卖物品的用户)中,我需要找到他们的帐户余额。这也在accounts
表中。余额包含在名为operation_amount
的列中。我还有另一个名为operation_type
的列,它描述了用户是否有正余额或负余额。例如,如果operation_type = 1
,他的余额为负,而如果operation_type = 2
,则余额为正。
现在我有另一个名为tmpinvoice
的表,其中有一个名为amount
的列。这显示了用户需要向网站管理员支付多少费用。
鉴于此,我需要计算他必须支付多少钱。例如,如果用户的余额为200美元,我需要根据operation_type
检查其是否为正数。
想象一下balance - fees = total
的情景,例如200 - 0.25 = ?
。在这种情况下,根据200
是正还是负,计算的金额会有所不同。
我希望这是一个更好的描述。
答案 0 :(得分:0)
我不确定这是不是你想要的,但让我尝试一下:
SELECT [user],
account_balance + TotalAmount
FROM accounts A
JOIN
(
SELECT user,
SUM(amount) AS TotalAmount
FROM tmpinvoice
) T
ON T.[user] = A.[user]
答案 1 :(得分:0)
处理变量中的Amount和Operation以便于阅读。
IF @OperationType = 1
BEGIN
SET @Amount = @Amount - 0.25
END
ELSE
BEGIN
SET @Amount = @Amount + 0.25
END
答案 2 :(得分:0)
是的,你可以在sql中使用if else
,这里是我用于mysql的语法
SELECT IF(condition, true,false) from tbl
答案 3 :(得分: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
答案 4 :(得分:0)
听起来你想知道用户的总余额是多少。例如,如果用户的负余额为200且欠网站运营商的.50,那么它应该是-200 -.50,而她欠的总共为-200.50。如果它是可能的,则公司欠她的是199.50的200 - 0.50。我做对了吗?您要查找的主要部分是以下查询中的CASE语句。此解决方案适用于SQL Server。许多其他数据库具有类似的CASE语句语法,但正如您在SQL Fiddle链接上看到的那样,这适用于SQL Server。
我正在简化并假设每个用户只有一个帐户,每个用户只有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了解工作示例