Förgreningssatser i SELECT-satsen. NVL-konverteringar för olika datatyper Lab


Vi berörde kapslade funktioner lite tidigare, nu kommer vi att överväga dem mer i detalj. Vi kommer också att titta på funktioner för att arbeta med NULL-värden och funktioner som hjälper till att implementera förgreningsoperationen i en fråga.

Kapslade funktioner

Kapslade funktioner använder returvärdet för en funktion som en indataparameter till en annan funktion. Funktioner returnerar alltid endast ett värde. Därför kan du behandla resultatet av ett funktionsanrop som ett bokstavligt värde när du använder det som en parameter för ett anrop till en annan funktion. Inline-funktioner kan kapslas till valfri kapslingsnivå. Ett funktionsanrop ser ut så här

Funktion1 (parameter1, parameter2,...) = resultat

Att ersätta en funktionsparameter med ett anrop till en annan funktion kan resultera i uttryck som

F1 (param1.1, F2 (param2.1, param2.2, F3 (param3.1)), param1.3)

Kapslade funktioner utvärderas först innan deras resultat används som indata till andra funktioner. Funktioner utvärderas från den djupaste häckningsnivån till den högsta, från vänster till höger. Det föregående uttrycket exekveras enligt följande

  1. Funktion F3 (param1) beräknas och returvärdet används som tredje parameter för funktion 2, låt oss kalla det param2.
  2. Därefter beräknas funktionen F2 (param1, param2.2, param2.3) och returvärdet används som den andra parametern för F1-funktionen - param1.2
  3. Slutligen utvärderas funktionen F1 (param1, param2, param1.3) och returneras till det anropande programmet.

Funktionen F3 är alltså på den tredje kapslingsnivån.

Överväg begäran

välj nästa_dag (sista_dag (sysdate) -7, 'tis') från dubbel;

  1. Det finns tre funktioner i denna begäran, från botten till toppen - SYSDATE, LAST_DAY, NEXT_DAY. Begäran verkställs enligt följande
  2. Den mest kapslade SYSDATE-funktionen exekveras. Den returnerar den aktuella systemtiden. Anta att det aktuella datumet är den 28 oktober 2009
  3. Därefter beräknas resultatet av den andra nivåfunktionen LAST_DAY. LAST_DATE ('28 -OCT-2009 ') returnerar den sista dagen i oktober 2009, vilket är den 31 oktober 2009.
  4. Sedan dras sju dagar från detta datum - det visar sig den 24 oktober.
  5. Slutligen utvärderas funktionen NEXT_DAY ('24 -OCT-2009 ',' ti ') och frågan returnerar den sista tisdagen i oktober - vilket är 27-OKT-2009 i vårt exempel.

Det är svårt nog att förstå och bygga komplexa uttryck med många kapslade funktionsanrop, men detta kommer med tid och övning. Du kan dela upp sådana uttryck i delar och testa dem separat. DUAL-tabellen är mycket användbar för att testa frågor och funktionsanrop. Du kan testa och felsöka små komponenter, som sedan kan kombineras till ett stort, önskat uttryck.

Förgreningsfunktioner

Förgreningsfunktioner, även kända som IF-THEN-ELSE, används för att bestämma exekveringsvägen baserat på vissa omständigheter. Förgreningsfunktioner returnerar olika resultat baserat på resultatet av att utvärdera ett villkor. I gruppen av sådana funktioner särskiljs funktionerna för att arbeta med NULL-värden: NVL, NVL2, NULLIF och COALESCE. Och även de vanliga funktionerna som representeras av DECODE-funktionen och CASE-uttrycket. Funktionen DECODE är en Oracle-funktion, medan CASE-uttrycket finns i ANSI SQL-standarden.

NVL funktion

Funktionen NVL testar värdet på en kolumn eller ett uttryck av valfri datatyp för NULL. Om värdet är NULL returnerar det ett alternativt standardvärde som inte är NULL, annars returneras det ursprungliga värdet.

NVL-funktionen har två nödvändiga parametrar och syntaxen är NVL (original, ifnull) där original är det ursprungliga värdet som ska kontrolleras och ifnull är resultatet som returneras av funktionen om original är NULL. Datatypen för ifnull- och originalparametrarna måste vara kompatibla. Det vill säga, antingen måste datatypen vara densamma eller så måste det vara möjligt att implicit konvertera värden från en typ till en annan. Funktionen NVL returnerar ett värde av samma datatyp som datatypen för den ursprungliga parametern. Överväg tre förfrågningar

Fråga 1: välj nvl (1234) från dubbel;

Fråga 2: välj nvl (null, 1234) från dubbel;

Fråga 3: välj nvl (substr ('abc', 4), 'Ingen understräng existerar') från dual;

Eftersom NVL-funktionen kräver två parametrar kommer fråga 1 att returnera felet ORA-00909: ogiltigt antal argument. Fråga 2 kommer att returnera 1234 eftersom NULL är markerat och det är NULL. Fråga tre använder en kapslad SUBSTR-funktion som försöker extrahera det fjärde tecknet från en sträng med tre tecken, returnerar NULL och NVL-funktionen returnerar strängen "No sbustring exists".

NVL-funktionen är mycket användbar när du arbetar med siffror. Den används för att konvertera NULL-värden till 0 så att aritmetiska operationer på tal inte returnerar NULL.

NVL funktion2

NVL2 ger mer funktionalitet än NVL, men den hanterar också NULL-värden. Den testar värdet på en kolumn eller ett uttryck av valfri typ för NULL. Om värdet inte är NULL, returneras den andra parametern, annars returneras den tredje parametern, till skillnad från NVL-funktionen, som i detta fall returnerar det ursprungliga värdet.

Funktionen NVL2 har tre nödvändiga parametrar och syntaxen NVL2 (original, ifnotnull, ifnull), där original är värdet som ska kontrolleras, ifnotnull är värdet som returneras om original inte är NULL, och ifnull är värdet som returneras om original är NULL. Datatyperna för parametrarna ifnotnull och ifnull måste vara kompatibla och får inte vara av typen LONG. Datatypen som returneras av NVL2-funktionen är lika med datatypen för parametern ifnotnull. Låt oss titta på några exempel

Fråga 1: välj nvl2 (1234, 1, 'en sträng') från dual;

Fråga 2: välj nvl2 (null, 1234, 5678) från dubbel;

Fråga 3: välj nvl2 (substr ('abc', 2), 'Inte bc', 'Ingen understräng') från dual;

Ifnotnull-parametern i fråga 1 är ett nummer och ifnull-parametern är en sträng. Eftersom datatyperna är inkompatibla returneras felet "ORA-01722: ogiltigt nummer". Begäran två returnerar parametern ifnull, eftersom original är NULL och resultatet är 5678. Begäran tre använder funktionen SUBSTR som returnerar 'bc' och anropar NVL2 ('bc', 'Inte bc', 'Ingen delsträng') - vilket returnerar ifnotnull parameter - 'Inte bc'.

NULLIF-funktion

Funktionen NULLIF testar två värden för identitet. Om de är samma returneras NULL annars returneras den första parametern. NULLIF-funktionen har två nödvändiga parametrar och NULLIF-syntaxen (ifunequal, comparison_item). Funktionen jämför två parametrar och om de är identiska - NULL returneras, annars parametern ifunequal. Överväg förfrågningar

Fråga 1: välj nullif (1234, 1234) från dubbel;

Fråga ett returnerar NULL eftersom parametrarna är identiska. Strängarna i fråga 2 konverteras inte till datum, utan jämförs som strängar. Eftersom strängarna är av olika längd, returneras ifunequal 24-JUL-2009.

I figur 10-4 är NULLIF-funktionen kapslad i NVL2-funktionen. Funktionen NULLIF använder i sin tur funktionerna SUBSTR och UPPER som en del av uttrycket i parametern ifunequal. Kolumnen EMAIL jämförs med detta uttryck, som returnerar den första bokstaven i förnamnet sammanlänkat med efternamnet för anställda vars förnamn är 4 tecken långt. När dessa värden är lika, returnerar NULLIF NULL, och värdet returnerar värdet för parametern ifunequal. Dessa värden används som en parameter för NVL2-funktionen. NVL2 returnerar i sin tur en beskrivning av om de jämförda objekten matchade eller inte.

Figur 10-4 - Användning av NULLIF-funktionen

COALESCE funktion

Funktionen COALESCE returnerar det första icke-NULL-värdet från parameterlistan. Om alla parametrar är NULL, returneras NULL. COALESCE-funktionen har två obligatoriska parametrar och så många valfria parametrar som du vill, och COALESCE-syntaxen (expr1, expr2, ..., exprn) där resultatet är expr1 om expr inte är NULL, annars returneras expr2 om det inte är det NULL och så vidare. COALESCE är lika med kapslade NVL-funktioner

COALESCE (expr1, expr2) = NVL (expr1, expr2)

COALESCE (expr1, expr2, expr3) = NVL (expr1, NVL (expr2, expr3))

Datatypen för returvärdet om ett icke-NULL-värde hittas är lika med datatypen för det första icke-NULL-värdet. För att undvika felet 'ORA-00932: inkonsekventa datatyper' måste alla parametrar som inte är NULL vara kompatibla med den första icke-NULL-parametern. Låt oss titta på tre exempel

Fråga 1: välj sammansmälta (null, null, null, 'en sträng') från dubbel;

Fråga 2: välj sammansmälta (null, null, null) från dubbel;

Fråga 3: välj sammansmälta (substr ('abc', 4), 'Inte bc', 'Ingen understräng') från dual;

Fråga 1 returnerar den fjärde parametern: en sträng, eftersom detta är den första icke-NULL-parametern. Fråga två returnerar NULL eftersom alla parametrar är NULL. Fråga 3 utvärderar den första parametern, får ett NULL-värde och returnerar den andra parametern, eftersom det är den första icke-NULL-parametern.

Parametrarna för NVL2-funktionen kan vara förvirrande om du redan är bekant med NVL-funktionen. NVL (original, ifnull) returnerar original om värdet inte är NULL, annars ifnull. NVL2 (original, ifnotnull, ifnull) returnerar ifnotnull om originalet inte är NULL annars ifnull. Förvirringen beror på att den andra parametern i NVL-funktionen är ifnull, medan den i NVL2 är ifnotnull. Så lita inte på parameterns position i funktionen.

DECODE-funktionen

Funktionen DECODE implementerar if-then-else-logik genom att kontrollera de två första parametrarna för likhet och returnera det tredje värdet om de är lika, eller ett annat värde om de inte är lika. DECODE-funktionen har tre nödvändiga parametrar och DECODE-syntaxen (expr1, comp1, iftrue1,,). Dessa parametrar används som visas i följande pseudokodexempel

OM expr1 = comp1 returnera sedan iftrue1

Annars om expr1 = comp2 returnerar du iftrue2

Annars om exprN = compN returnera iftrueN

Else return NULL | iffalse;

Först jämförs expr1 med comp1. Om de är lika returneras iftrue1. Om expr1 inte är lika med comp1, beror vad som händer sedan på om parametrarna comp2 och iftrue2 är specificerade. Om det ges jämförs värdet av expr1 med comp2. Om värdena är lika, returneras iftrue2. Om inte, om det finns parametrar compN, jämförs iftrueN, expr1 och compN och iftrueN returneras om lika. Om ingen matchning hittades i någon av parameteruppsättningarna returneras antingen iffalse om den här parametern angavs, eller NULL.

Alla parametrar i DECODE-funktionen kan vara uttryck. Returtypen är lika med typen av det första valideringselementet - parametern komp 1. Uttryck expr 1 är implicit konverterbar till datatypen för parametern comp1. Alla andra tillgängliga komp-alternativ 1 ... kompN även implicit konvertibel till komp 1. DECODE behandlar ett NULL-värde som lika med ett annat NULL-värde, dvs. om expr1 är NULL och comp3 är NULL och comp2 inte är NULL, returneras iftrue3. Låt oss titta på några exempel

Fråga 1: välj avkoda (1234, 123, '123 är en matchning') från dubbel;

Fråga 2: välj avkoda (1234, 123, '123 är en matchning', 'Ingen matchning') från dubbel;

Fråga 3: välj avkoda ('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr ('2search', 2, 6), 'true4', ' false ') från dubbel;

Fråga ett jämför värdet 1234 och 123. Eftersom de inte är lika, ignoreras iftrue1, och eftersom inget iffalse-värde är definierat returneras NULL. Begäran två är identisk med begäran 1 förutom att iffalse anges. Eftersom 1234 inte är lika med 123 returneras iffalse - 'Ingen matchning'. Begär tre kontrollerar parametervärdena för att se om de matchar sökvärdet. Parametrarna comp1 och comp2 är inte "sökning" så resultaten av iftrue1 och iftrue2 hoppas över. Matchningen finns i den tredje jämförelsen av comp3 (parameterposition 6) och returvärdet iftrue3 (parameter 7) är "true3". Eftersom en matchning hittades görs inga ytterligare beräkningar. Det vill säga, trots att värdet på comp4 (parameter 8) också matchar expr1, så beräknas aldrig detta uttryck eftersom en matchning hittades i den tidigare jämförelsen.

CASE uttryck

Alla tredje och fjärde generationens programmeringsspråk implementerar fallkonstruktionen. Precis som funktionen DECODE låter CASE-uttrycket dig implementera if-then-else logik. Det finns två alternativ för att använda CASE-uttrycket. Ett enkelt CASE-uttryck anger att källan ska jämföras en gång och listar sedan alla nödvändiga testvillkor. Den sökta CASE utvärderar båda påståendena för varje tillstånd.

CASE-uttrycket har tre nödvändiga parametrar. Uttryckssyntaxen är typberoende. För ett enkelt CASE-uttryck ser det ut så här

CASE search_expr

WHEN comparison_expr1 THEN iftrue1

)

Funktionen TRUNC returnerar talet n, trunkerat till m decimaler. Parametern m kan utelämnas - i detta fall trunkeras n till ett heltal.

VÄLJ TRUNC (100.25678) X1, TRUNC (-100.25678) X2, TRUNC (100.99) X3,

TRUNC (100.25678, 2) X4

FRÅN DUAL

TECKN (n) funktion

Funktionen TECKN bestämmer tecknet för ett tal. Om n är positivt returnerar funktionen 1. Om n är negativ returneras -1. Om lika med noll returneras 0. Till exempel:

VÄLJ TECKN (100,22) X1, TECKN (-100,22) X2, TECKN (0) X3

FRÅN DUAL

En intressant egenskap hos denna funktion är förmågan att passera m lika med noll - i det här fallet finns det ingen division med 0-fel.

POWER (n, m) funktion

POWER-funktionen höjer n till m-effekten. Graden kan vara bråkdel eller negativ, vilket avsevärt utökar funktionerna för denna funktion.

VÄLJ STRÖM (10, 2) X1, STRÖM (100, 1/2) X2,

POWER (1000, 1/3) X3, POWER (1000, -1/3) X4

FRÅN DUAL

X1 X2 X3 X4
100 10 10 0,1

I vissa fall kan ett undantag inträffa när den här funktionen anropas. Till exempel:

VÄLJ STRÖM (-100, 1/2) X2

FRÅN DUAL

I det här fallet görs ett försök att beräkna kvadratroten ur ett negativt tal, vilket kommer att resultera i felet ORA-01428 "Argument utanför intervallet".

SQRT (n) funktion

Denna funktion returnerar kvadratroten ur n. Till exempel:

VÄLJ SQRT (100) X

FRÅN DUAL

EXP (n) och LN (n) funktioner

EXP-funktionen höjer e till potensen av n, och LN-funktionen beräknar den naturliga logaritmen för n (där n måste vara större än noll). Exempel:

VÄLJ EXP (2) X1, LN (1) X2, LN (EXP (2)) X3

NVL funktion

NVL-funktionen är vanligtvis den vanligaste. Funktionen tar två parametrar: NVL (uttr1, uttr2). Om den första parametern i expr1 inte är NULL, returnerar funktionen sitt värde. Om den första parametern är NULL, returnerar funktionen istället värdet för den andra parametern expr2.

Låt oss titta på ett praktiskt exempel. COMM-fältet i EMP-tabellen kan innehålla NULL-värden. När du kör en fråga som:

VÄLJ EMPNO, ENAME, COMM, NVL (COMM, 0) NVL_COMM

FRÅN SCOTT.EMP

NULL-värdet kommer att ersättas med noll. Observera att om du genererar ett värde med hjälp av en funktion tilldelas det ett alias. Frågeresultaten kommer att se ut så här:

EMPNO ENAME KOMM NVL_COMM
7369 SMED 0
7499 ALLEN 300 300
7521 AVDELNING 500 500
7566 JONES 0
7654 MARTIN 1400 1400
7698 BLAKE 0
7782 CLARK 0
7839 KUNG 0
7844 SVARVARE 0 0
7900 JAMES 0
7902 VADSTÄLLE 0
7934 MJÖLNARE 0

CEIL (n) funktion

CEIL-funktionen returnerar det minsta heltal som är större än eller lika med antalet n som skickas som en parameter. Till exempel:

VÄLJ CEIL (100) X1, CEIL (-100) X2, CEIL (100,2) X3, CEIL (-100,2) X4

FRÅN DUAL

TRUNC-funktion (n [, m])

Funktionen TRUNC returnerar talet n, trunkerat till m decimaler. Parametern m kan utelämnas - i detta fall trunkeras n till ett heltal.

VÄLJ TRUNC (100.25678) X1, TRUNC (-100.25678) X2, TRUNC (100.99) X3,

TRUNC (100.25678, 2) X4

FRÅN DUAL

TECKN (n) funktion

Funktionen TECKN bestämmer tecknet för ett tal. Om n är positivt returnerar funktionen 1. Om n är negativ returneras -1. Om lika med noll returneras 0. Till exempel:

VÄLJ TECKN (100,22) X1, TECKN (-100,22) X2, TECKN (0) X3

FRÅN DUAL

En intressant egenskap hos denna funktion är förmågan att passera m lika med noll - i det här fallet finns det ingen division med 0-fel.

POWER (n, m) funktion

POWER-funktionen höjer n till m-effekten. Graden kan vara bråkdel eller negativ, vilket avsevärt utökar funktionerna för denna funktion.

VÄLJ STRÖM (10, 2) X1, STRÖM (100, 1/2) X2,

POWER (1000, 1/3) X3, POWER (1000, -1/3) X4

FRÅN DUAL

X1 X2 X3 X4
100 10 10 0,1

I vissa fall kan ett undantag inträffa när den här funktionen anropas. Till exempel:

VÄLJ STRÖM (-100, 1/2) X2

FRÅN DUAL

I det här fallet görs ett försök att beräkna kvadratroten ur ett negativt tal, vilket kommer att resultera i felet ORA-01428 "Argument utanför intervallet".

SQRT (n) funktion

Denna funktion returnerar kvadratroten ur n. Till exempel:

VÄLJ SQRT (100) X

FRÅN DUAL

EXP (n) och LN (n) funktioner

EXP-funktionen höjer e till potensen av n, och LN-funktionen beräknar den naturliga logaritmen för n (där n måste vara större än noll). Exempel:

VÄLJ EXP (2) X1, LN (1) X2, LN (EXP (2)) X3

TO_CHAR funktion med siffror

Funktioner för att konvertera data till andra datatyper. TO_CHAR (nummer) konverterar ett tal till text. TO_NUMBER (sträng) konverterar text till nummer.

SELECT TO_CHAR (123) FROM DUAL returnerar sträng 123, SELECT TO_NUMBER (`12345") FROM DUAL returnerar 12345.

Laboratoriearbete. Ändra formatet för visade siffror

Ändringar av formatet för numeriska värden i Oracle SQL, TO_CHAR-funktion för att arbeta med numeriska värden.

Träning:

Skriv en fråga som visar förnamn, efternamn och löneinformation för anställda från tabellen hr.anställda i formatet som visas i figur 1. 3,4-1:

Ris. 3.4 -1

I detta fall bör uppgifterna sorteras på ett sådant sätt att de första raderna visas för de anställda med högst lön.

Notera:

Några lönevärden i fig. 3.4-1 har ändrats, så de kanske inte matchar dina värden.

Lösning:

VÄLJ förnamn SOM "Förnamn", efternamn Som "Efternamn", TO_CHAR (LÖN, "L999999999.99") Som "Lön" FRÅN hr.anställda BESTÄLLNING EFTER LÖNDESK.

TO_NUMBER och TO_DATE funktioner

Funktion för att konvertera en sträng till ett datum TO_DATE (sträng, format). Möjliga formatvärden har redan diskuterats ovan, så jag kommer att ge flera exempel på hur du använder den här funktionen. Exempel:

VÄLJ TO_DATE ("01.01.2010", "DD.MM.ÅÅÅÅ") FRÅN DUAL kommer att returnera datumet `01.01.2010";

VÄLJ TO_DATE ("01.JAN.2010", `DD.MON.YYYY") FRÅN DUAL returnerar datumet `01.01.2009";

VÄLJ TO_DATE ("15-01-10", `DD-MM-YY") FRÅN DUAL kommer att returnera datumet "15/01/2010".

Funktion för att konvertera en sträng till ett numeriskt värde TO_NUMBER (sträng, format). De vanligaste formatvärdena listas i tabellen, så låt oss titta på användningen av denna funktion med exempel. Exempel:

VÄLJ TO_NUMBER (`100") FRÅN DUAL returnerar numret 100 SELECT TO_NUMBER (`0010.01", "9999D99") FRÅN DUAL returnerar numret 10.01;

VÄLJ TO_NUMBER ("500 000", "999G999") FRÅN DUAL ger tillbaka 500 000.

RR-element i datumformat

RR-datum- och tidsformatelementet liknar YY-datum- och tidsformatelementet, men det ger ytterligare flexibilitet för att lagra datumvärden i andra århundraden. Formatelementet RR datetime låter dig lagra datum från 1900-talet till 2000-talet genom att endast ange de två sista siffrorna i året.

Om de två sista siffrorna i innevarande år är 00 till 49, har det returnerade året samma första två siffror som innevarande år.

Om de två sista siffrorna i det aktuella året är mellan 50 och 99, är de två första siffrorna i det returnerade året 1 större än de två första siffrorna i det aktuella året.

Om de två sista siffrorna i det aktuella året är 00 till 49, är de två första siffrorna i det returnerade året 1 mindre än de två första siffrorna i det aktuella året.

Om de två sista siffrorna i innevarande år är mellan 50 och 99, har det returnerade året samma första två siffror som innevarande år.

NVL funktion

NVL-funktionen är vanligtvis den vanligaste. Funktionen tar emot två parametrar: NVL (expr1, exp2). Om den första parametern i expr1 inte är NULL, returnerar funktionen sitt värde. Om den första parametern är NULL, returnerar funktionen värdet för den andra parametern exp2 istället.

Exempel: Välj NVL (supplier_city, n/a ") från leverantörer:

SQL-satsen ovan kommer att returnera n / "om leverantörsort är null, annars returnerar den leverantörsort.

Ett annat exempel på att använda NVL-funktionen i Oracle / PLSQL är:

välj leverantörs-id, NVL (leverantörsbeskrivning, leverantörsnamn) från leverantörer.

Denna SQL-sats kommer tillbaka Leverantörsnamn fältet om leverantör_desc innehåller ett nollvärde. Annars kommer den tillbaka leverantör_desc.

Ett sista exempel: att använda NVL-funktionen i Oracle / PLSQL är: välj NVL (kommission, 0) från försäljningen;

Denna SQL-sats returnerade 0 if provision fältet innehåller ett nollvärde. Annars skulle det komma tillbaka provision fält.

NVL-konverteringar för olika datatyper

Funktionen NVL används för att konvertera ett odefinierat värde till ett verkligt värde: NVL ( uttryck 1, uttryck 2), var:

uttryck1- Det ursprungliga eller beräknade värdet, som kan vara odefinierat.

uttryck2- Värdet som ersätts med det odefinierade värdet.

Notera: NVL-funktionen kan användas för att konvertera vilken datatyp som helst, men resultatet blir alltid samma typ som uttryck1.

Konvertera NVL för olika typer:

NUMMER - NVL (numerisk kolumn, 9).

CHAR eller VARCHAR2 - NVL (symboler | kolumn,"Inte tillgänglig").

Laboratoriearbete. Använder NVL-funktionen

NVL-funktion för att arbeta med nollvärden i Oracle SQL.

Träning:

Skriv en fråga som visar information om för- och efternamn på anställda från hr.anställda Tabell, samt provisionssatsen (kolumnen COMMISSION_PCT) för den anställde. I det här fallet, för de anställda för vilka provisionen inte är definierad, måste du visa värdet 0. Resultatet av frågan bör vara detsamma som visas i fig. 3,5-1.

Ris. 3.5 -1 (visar värden som börjar på rad 51)

Lösning:

Motsvarande förfrågningskod kan vara så här:

SELECT first_name AS “First name”, last_name Som “Efternamn”, NVL (COMMISSION_PCT, 0) Som “Provisionssats” FRÅN hr.anställda.







2021 gtavrl.ru.