如何制作SQL" IF-THEN-ELSE"声明

时间:2015-08-25 16:26:46

标签: sql-server if-statement

我已经看过关于SQL If-then-else内容的其他问题,但我没有看到如何将它与我尝试做的事情联系起来。我已经使用SQL大约一年了,但只是基本的东西,从来没有。

如果我有一个看起来像这样的SQL表

|  Name | Version | Category | Value | Number |
|:-----:|:-------:|:--------:|:-----:|:------:|
| File1 | 1.0     | Time     |   123 |      1 |
| File1 | 1.0     | Size     |   456 |      1 |
| File1 | 1.0     | Final    |   789 |      1 |
| File2 | 1.0     | Time     |   312 |      1 |
| File2 | 1.0     | Size     |   645 |      1 |
| File2 | 1.0     | Final    |   978 |      1 |
| File3 | 1.0     | Time     |   741 |      1 |
| File3 | 1.0     | Size     |   852 |      1 |
| File3 | 1.0     | Final    |   963 |      1 |
| File1 | 1.1     | Time     |   369 |      2 |
| File1 | 1.1     | Size     |   258 |      2 |
| File1 | 1.1     | Final    |   147 |      2 |
| File2 | 1.1     | Time     |   741 |      2 |
| File2 | 1.1     | Size     |   734 |      2 |
| File2 | 1.1     | Final    |   942 |      2 |
| File3 | 1.1     | Time     |   997 |      2 |
| File3 | 1.1     | Size     |   997 |      2 |
| File3 | 1.1     | Final    |   985 |      2 |

如何编写一个SQL IF,ELSE语句,该语句创建一个名为&#34的新列;复制"遵循这条规则:

A = B + 1 when x = 1
else 
A = B

where A = the number we will use for the next Number
B = Max(Number)
x = Replication count (this is the number of times that a loop is executed. x=i)

结果表如下所示:

|  Name | Version | Category | Value | Number | Replication |
|:-----:|:-------:|:--------:|:-----:|:------:|:-----------:|
| File1 | 1.0     | Time     |   123 |      1 |           1 |
| File1 | 1.0     | Size     |   456 |      1 |           1 |
| File1 | 1.0     | Final    |   789 |      1 |           1 |
| File2 | 1.0     | Time     |   312 |      1 |           1 |
| File2 | 1.0     | Size     |   645 |      1 |           1 |
| File2 | 1.0     | Final    |   978 |      1 |           1 |
| File1 | 1.0     | Time     |   369 |      1 |           2 |
| File1 | 1.0     | Size     |   258 |      1 |           2 |
| File1 | 1.0     | Final    |   147 |      1 |           2 |
| File2 | 1.0     | Time     |   741 |      1 |           2 |
| File2 | 1.0     | Size     |   734 |      1 |           2 |
| File2 | 1.0     | Final    |   942 |      1 |           2 |
| File1 | 1.1     | Time     |   997 |      2 |           1 |
| File1 | 1.1     | Size     |   997 |      2 |           1 |
| File1 | 1.1     | Final    |   985 |      2 |           1 |
| File2 | 1.1     | Time     |   438 |      2 |           1 |
| File2 | 1.1     | Size     |   735 |      2 |           1 |
| File2 | 1.1     | Final    |   768 |      2 |           1 |
| File1 | 1.1     | Time     |   786 |      2 |           2 |
| File1 | 1.1     | Size     |   486 |      2 |           2 |
| File1 | 1.1     | Final    |   135 |      2 |           2 |
| File2 | 1.1     | Time     |   379 |      2 |           2 |
| File2 | 1.1     | Size     |   943 |      2 |           2 |
| File2 | 1.1     | Final    |   735 |      2 |           2 |

编辑:根据Sean Lange的回答,这是我第二次尝试解决方案:

SELECT COALESCE(MAX)(Number) + CASE WHEN Replication = 1 then 1 else 0, 1) FROM Table

当{Number>列中没有值时,COALESCE就在那里。

2 个答案:

答案 0 :(得分:5)

IF / Else构造用于控制t-sql中的语句流。您需要一个案例表达式,用于有条件地返回列中的值。

https://msdn.microsoft.com/en-us/library/ms181765.aspx

你的意思是:

case when x = 1 then A else B end as A

答案 1 :(得分:1)

正如SeanLange在这种情况下指出的那样最好使用CASE/WHEN但是为了说明如何使用If\ELSE在sql中这样做的方式是这样的:

 if x = 1
 BEGIN
 ---Do something
 END
 ELSE
 BEGIN
 --Do something else
 END

我会说最好的方法来了解差异以及何时使用,如果您正在编写查询并希望根据特定条件显示不同的字段,请使用case/when。如果某个条件会导致一系列步骤发生,请使用if/else