SQL中是否有`if`语法?

时间:2013-08-02 06:58:00

标签: sql

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

  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,则余额为正。

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

    鉴于此,我需要计算他必须支付多少钱。例如,如果用户的余额为200美元,我需要根据operation_type检查其是否为正数。

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

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

5 个答案:

答案 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)

Documentation for MSSQL IF

处理变量中的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了解工作示例