T-SQL IIF lub CASE, powielanie obliczeń

0

Cześć wszystkim

Może źle temat napisałem, ale zaraz wyjaśnię o co mi chodzi.

Dane do testów

Create table #test (a int, b int, c int)
insert into #test
values(5,2,3)
    ,(5,1,9)
    ,(5,9,1)
    ,(2,2,3)

select 
    *
    ,IIF(a+b-c<0,0,a+b-c) as result
from
    #test

-- dla tych co mają niższą wersję sql niz 2012
select 
    *
    ,case when a+b-c<0 then 0 else a+b-c end as result
from
    #test

I teraz, czy da się jakoś zrobić aby nie powielać tego kodu pogrubionego

,IIF(a+b-c<0,0,a+b-c) as result

tylko nie interesuje mnie wyciągnięcie tego do kolejnego selecta :)

możne jakieś pomysły?

Pozdrawiam.

1
IF EXISTS(SELECT * FROM sysobjects WHERE xtype = 'FN' AND name = 'onlyPositveNumber')
BEGIN
    DROP FUNCTION dbo.onlyPositveNumber
END
GO

--the real function definition
CREATE FUNCTION dbo.onlyPositveNumber(@num INT)
RETURNS INT
AS
BEGIN
  DECLARE @r AS INT; 
    SET @r= IIF(@num<0,0,@num)
END
    RETURN  @r;
END
GO

SELECT 
    *
    ,dbo.onlyPositveNumber(a+b-c) AS RESULT
FROM
    #test
0

no tego raczej mi nie pozwolą wgrać ale też myślałem o tym, bardziej chodziło mi o jakieś funkcje/ kombinacje które już istnieją :)

0

A w czym przeszkadza to powielenie?

0

teoretycznie w niczym, w praktyce też nie ale takie powielanie jakby nie było to też by ładnie było :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0