Como fazer uma declaração SQL "IF-THEN-ELSE"

Já vi outras perguntas sobre SQL se-then-else stuff, mas não estou a ver como relacioná-lo com o que estou a tentar fazer. Tenho usado SQL há cerca de um ano, mas apenas coisas básicas e nunca isto.

Se eu tiver uma tabela SQL que se pareça com esta

|  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 |

Como posso escrever uma declaração SQL se, caso contrário, cria uma nova coluna chamada "replicação" que segue esta regra:

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)

a tabela de resultados será assim:

|  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 |

editar: com base em a resposta de Sean Lange, esta é a minha segunda tentativa para uma solução:

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

o COALESCE está lá para quando ainda não há valor na coluna de Números.

Author: David, 2015-08-25

2 answers

A construção IF/Else é usada para controlar o fluxo de declarações em t-sql. Deseja uma expressão de caso, que é usada para devolver os valores condicionalmente numa coluna.

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

O teu seria algo do género:
case when x = 1 then A else B end as A
 5
Author: Sean Lange, 2015-08-25 16:31:33

Como SeanLange apontadas neste caso, seria melhor usar um CASE/WHEN, mas para ilustrar como usar If\ELSE a maneira de o fazer em sql é semelhante a esse:

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

Eu diria a melhor maneira de saber a diferença e quando usar que é se você está escrevendo uma consulta e quer que um campo diferente apareça com base em uma determinada condição, use case/when. Se uma determinada condição irá causar uma série de passos a acontecer, em seguida, use if/else

 1
Author: logixologist, 2015-08-25 16:43:18