2014-10-20 3 views
1

У меня есть столбец вSQL Server: условно добавлять строки и столбцы

-------------------------------------------------------------- 
| Sl. No. | bal1 | bal2 | bal3 | status1 | status2 | status3 | 
-------------------------------------------------------------- 
| 1 | 520 | 270 | 351 | 1 | 0  | 1 | 
| 2 | 201 | 456 | 154 | 0 | 1  | 1 | 
-------------------------------------------------------------- 

Я хотел бы добавить поле строк для значения Status = 1 в SQL Server

например.

-------------------- 
| Sl. No. | amount | 
-------------------- 
| 1 | 871 | // bal1 + bal3 as the status1 and status3 is 1 
| 2 | 610 | // bal2 + bal3 as the status2 and status3 is 1 
-------------------- 

Заранее благодарен.

+1

'СЛУЧАЙ status1 WHEN 1 THEN bal1 ELSE 0 END + CASE status2 WHEN 1 THEN bal2 ELSE 0 END + CASE status3 КОГДА 1 TH EN bal3 ELSE 0 END' –

ответ

2

вы можете сделать это с помощью CASE

SQL Fiddle

SELECT [SI. No.], 
     (case when status1 =1 then bal1 else 0 end + 
     case when status2 =1 then bal2 else 0 end + 
     case when status3 =1 then bal3 else 0 end) as balance 

from Table1 
3

Если status значения всегда будет 1 или 0, вы можете умножить и добавить:

select [Sl. No.], bal1 * status1 + bal2 * status2 + bal3 * status3 
from table 
+1

Умная идея! Хорошо на вас @adrift – sqluser

+0

Любопытно о downvote. Это обеспечит тот же результат, что и несколько случаев, и я ожидаю, что это будет лучше. –

+0

Не я, а у вас есть доказательства, что это будет работать лучше? Даже если это так, оправдывает ли это критический и не вполне самодокументирующий подход? Что произойдет, если столбцы статуса изменятся на другой тип (например, CHAR (1) для поддержки '' Y''/''N'' или TINYINT для поддержки дополнительных типов состояний)? –

2
SELECT [Sl. No.], 
    (case when bs.[status1] =1 then bs.bal1 else 0 end + 
    case when bs.status2 =1 then bs.bal2 else 0 end + 
    case when bs.status3 =1 then bs.bal3 else 0 end) as amount 
from BalStatus AS bs 
Смежные вопросы