ALTER procedure [dbo].[OPTYMALNA_REGULA](@wierzcholek varchar(10)) as begin create table Miara_optymalnosci (podzial int, pl float, pp float, Miara_optymalnosci float) declare @Tl float declare @Tp float declare @Pl float declare @Pp float declare @PjtL1 float declare @PjtP1 float declare @PjtL2 float declare @PjtP2 float declare @podzial integer declare @poziom nvarchar(50) declare @uczacy integer declare @liczba_rekordow integer declare @wynik float declare @operator char(50) declare @rodzaj char(50) set @uczacy= (select count(*) from Ryzyko_klient where Nazwa_w=@wierzcholek) if @uczacy<>0 begin begin tran set @podzial=1 while @podzial<= 9 begin if (SELECT OPERATOR FROM DANE_PODZIAL WHERE Nr_podzialu=@podzial)='IN' begin set @rodzaj= (select kategoria from DANE_PODZIAL where Nr_podzialu=@podzial) set @poziom= (select lewa_kategoria from DANE_PODZIAL where Nr_podzialu=@podzial) set @Tl=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on RK.NR=DK.NR and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek) set @Tp=@uczacy-@Tl set @Pl=@Tl/@uczacy set @Pp=@Tp/@uczacy if @Tl<>0 begin set @PjtL1=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on DK.nr=RK.nr and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe')/@Tl set @PjtL2=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM=@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@Tl end ELSE BEGIN set @PjtL1=0 set @PjtL2=0 END if @Tp<>0 begin set @PjtP1=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM<>@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@tp set @PjtP2=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM<>@poziom and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@tp end ELSE BEGIN set @Pjtp1=0 set @PjtP2=0 END set @wynik=2*@PL*@PP*(abs(@pjtL1-@PjtP1)+abs(@pjtL2-@PjtP2)) end else begin declare @poziom2 float set @rodzaj= (select kategoria from DANE_PODZIAL where Nr_podzialu=@podzial) set @poziom2= (select lewa_kategoria from DANE_PODZIAL where Nr_podzialu=@podzial) set @Tl=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on RK.NR=DK.NR and DK.POZIOM<=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and rk.Nazwa_w=@wierzcholek) set @Tp=@uczacy-@Tl set @Pl=@Tl/@uczacy set @Pp=@Tp/@uczacy if @Tl<>0 begin set @PjtL1=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM <=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@Tl set @PjtL2=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM <=@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@Tl end ELSE BEGIN set @PjtL1=0 set @PjtL2=0 END if @Tp<>0 begin set @PjtP1=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM >@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='małe'))/@tp set @PjtP2=(select COUNT(*) from DANE_KLIENT as DK inner join RYZYKO_KLIENT as RK on (DK.nr=RK.nr and DK.POZIOM >@poziom2 and DK.RODZAJ=@rodzaj and rk.Nazwa_w=@wierzcholek and RK.RYZYKO='duże'))/@tp set @wynik=2*@PL*@PP*(abs(@pjtL1-@PjtP1)+abs(@pjtL2-@PjtP2)) end ELSE BEGIN set @Pjtp1=0 set @PjtP2=0 END end insert into dbo.miara_optymalnosci values(@podzial,@Pl,@Pp,@wynik) set @podzial=@podzial+1 end commit tran end declare @tekst float if (select top(1) podzial from Miara_optymalnosci where miara_optymalnosci=(select max(miara_optymalnosci) from miara_optymalnosci))=1 and (select Miara_optymalnosci from miara_optymalnosci where podzial=1)=0 begin set @tekst=null end else begin set @tekst=(select top(1) podzial from Miara_optymalnosci where miara_optymalnosci=(select max(miara_optymalnosci) from miara_optymalnosci)) print @tekst end Update W_drzewa set REGULA=@tekst where NAZWA_W=@wierzcholek drop table Miara_optymalnosci end --------------------------------------------------------- ALTER PROC [dbo].[NOWE_WIERZCHOLKI_DRZEWA] @ID VARCHAR(50),@IDL_POTOMKA VARCHAR(50),@IDP_POTOMKA VARCHAR(50) AS BEGIN DECLARE @LICZNIK INT DECLARE @ID_W VARCHAR(50) DECLARE @L_POTOMEK VARCHAR(50) DECLARE @P_POTOMEK VARCHAR(50) DECLARE @ID_PODZIALU NVARCHAR(10) DECLARE @RODZAJ VARCHAR(50) DECLARE @WARTOSC VARCHAR(50) SET @ID_W=@ID SET @L_POTOMEK=@IDL_POTOMKA SET @P_POTOMEK=@IDP_POTOMKA UPDATE W_DRZEWA SET L_POTOMEK=@L_POTOMEK ,P_POTOMEK=@P_POTOMEK WHERE NAZWA_W=@ID_W --UPDATE W_DRZEWA SET L_POTOMEK='L'+@ID_W ,P_POTOMEK='P'+@ID_W WHERE NAZWA_W=@ID_W SET @ID_PODZIALU=(SELECT REGULA FROM W_DRZEWA WHERE NAZWA_W=@ID_W) --SET @L_POTOMEK=(SELECT L_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@ID_W) --SET @P_POTOMEK=(SELECT P_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@ID_W) SET @LICZNIK=(SELECT COUNT(*)+1 FROM W_DRZEWA) INSERT INTO W_DRZEWA VALUES (@L_POTOMEK,@ID_W,NULL,NULL,NULL,@LICZNIK,NULL) SET @LICZNIK=(SELECT COUNT(*)+1 FROM W_DRZEWA) INSERT INTO W_DRZEWA VALUES (@P_POTOMEK,@ID_W,NULL,NULL,NULL,@LICZNIK,NULL) SET @RODZAJ=(SELECT KATEGORIA FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU) SET @WARTOSC=(SELECT LEWA_KATEGORIA FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU) IF (SELECT OPERATOR FROM DANE_PODZIAL WHERE Nr_podzialu=@ID_PODZIALU)='IN' BEGIN UPDATE RYZYKO_KLIENT SET Nazwa_W=@L_POTOMEK WHERE Nazwa_W=@ID_W AND NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND POZIOM=@WARTOSC) UPDATE RYZYKO_KLIENT SET Nazwa_W=@P_POTOMEK WHERE Nazwa_W=@ID_W AND NOT NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND POZIOM=@WARTOSC) END ELSE BEGIN UPDATE RYZYKO_KLIENT SET Nazwa_W=@L_POTOMEK WHERE Nazwa_W=@ID_W AND NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND convert(decimal(18,6),POZIOM)<=CONVERT(DECIMAL(18,6),@WARTOSC)) UPDATE RYZYKO_KLIENT SET Nazwa_W=@P_POTOMEK WHERE Nazwa_W=@ID_W AND NR IN (SELECT NR FROM DANE_KLIENT WHERE RODZAJ=@RODZAJ AND convert(decimal(18,6),POZIOM)>CONVERT(DECIMAL(18,6),@WARTOSC)) END /*UPDATE W_DRZEWA SET REGULA=(SELECT OPTYMALNA_REGULA FROM OPTYMALNE_REGULY WHERE OPTYMALNE_REGULY.NAZWA_W=@L_POTOMEK) WHERE W_DRZEWA.NAZWA_W=@L_POTOMEK*/ DECLARE @ILE_GRUP INT SET @ILE_GRUP=(SELECT COUNT(ILE) FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@L_POTOMEK GROUP BY RYZYKO) AS TT) IF @ILE_GRUP=2 EXEC OPTYMALNA_REGULA @L_POTOMEK ELSE IF @ILE_GRUP=1 UPDATE W_DRZEWA SET DECYZJA=(SELECT TOP(1) RYZYKO FROM RYZYKO_KLIENT WHERE NAZWA_W=@L_POTOMEK GROUP BY RYZYKO ) WHERE W_DRZEWA.NAZWA_W=@L_POTOMEK /*UPDATE W_DRZEWA SET REGULA=(SELECT OPTYMALNA_REGULA FROM OPTYMALNE_REGULY WHERE OPTYMALNE_REGULY.NAZWA_W=@P_POTOMEK) WHERE W_DRZEWA.NAZWA_W=@P_POTOMEK*/ SET @ILE_GRUP=(SELECT COUNT(ILE) FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@P_POTOMEK GROUP BY RYZYKO) AS TT) IF @ILE_GRUP=2 EXEC OPTYMALNA_REGULA @P_POTOMEK ELSE IF @ILE_GRUP=1 UPDATE W_DRZEWA SET DECYZJA=(SELECT TOP(1)RYZYKO FROM RYZYKO_KLIENT WHERE NAZWA_W=@P_POTOMEK GROUP BY RYZYKO ) WHERE W_DRZEWA.NAZWA_W=@P_POTOMEK END ----------------------------------------------------------- ALTER PROC [dbo].[TWORZENIE_DRZEWA] AS BEGIN UPDATE RYZYKO_KLIENT SET NAZWA_W='K' DELETE W_DRZEWA WHERE NAZWA_W<>'K' OR NAZWA_W IS NULL update RYZYKO_KLIENT set NAZWA_W='K' exec optymalna_regula 'K' DECLARE @WIERZCHOLEK VARCHAR(50),@LP VARCHAR(50), @PP VARCHAR(50) DECLARE @ILE_GRUP INT DECLARE @LICZNIK INT SET @LICZNIK=1 WHILE @LICZNIK<=(SELECT COUNT(*)FROM W_DRZEWA) BEGIN SET @WIERZCHOLEK=(SELECT NAZWA_W FROM W_DRZEWA WHERE NR_W=@LICZNIK) SET @ILE_GRUP=(SELECT COUNT(ILE) FROM (SELECT COUNT(*)ILE FROM RYZYKO_KLIENT WHERE NAZWA_W=@WIERZCHOLEK GROUP BY RYZYKO) AS TT) IF @ILE_GRUP=2 BEGIN SET @LP='L'+@WIERZCHOLEK SET @PP='P'+@WIERZCHOLEK EXEC NOWE_WIERZCHOLKI_DRZEWA @WIERZCHOLEK,@LP,@PP END SET @LICZNIK=@LICZNIK+1 END END -------------------- ALTER PROC [dbo].[KLASYFIKACJA_DRZEWO_TP] @NR_KLIENTA INT AS BEGIN DECLARE @WYNIK VARCHAR(50) DECLARE @WIERZ VARCHAR(12) DECLARE @POP_WIERZ VARCHAR(12) SET @WIERZ='K' WHILE NOT @WIERZ IS NULL BEGIN SET @POP_WIERZ=@WIERZ IF (SELECT OPERATOR FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA)='IN' begin IF (SELECT POZIOM FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA AND OPERATOR='IN' )=( SELECT LEWA_KATEGORIA FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA) SET @WIERZ=(SELECT L_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@WIERZ) ELSE SET @WIERZ=(SELECT P_POTOMEK FROM W_DRZEWA WHERE NAZWA_W=@WIERZ) end ELSE IF CONVERT(DECIMAL(18,6),(SELECT POZIOM FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZAJ=KATEGORIA AND NR=@NR_KLIENTA AND OPERATOR<>'IN' ))<=CONVERT(DECIMAL(18,6),( SELECT LEWA_KATEGORIA FROM W_DRZEWA, DANE_PODZIAL, NOWY_KLIENT WHERE REGULA=NR_PODZIALU AND NAZWA_W=@WIERZ AND RODZA...
aivliska