---
title: "Typblandningsfel i uträkning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/158046-typblandningsfel-i-uträkning"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "MickeA.com"
published: "2007-03-10T16:58:54.000Z"
updated: "2007-03-11T13:55:29.000Z"
replies: 16
views: 779
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/158046-typblandningsfel-i-uträkning"
---

# Typblandningsfel i uträkning

## #1 — MickeA.com, 2007-03-10T16:58Z

Tjena
Jag har fyra kolumner i en MS SQL databas av typen "decimal(12, 2)".
Jag ska hämta dessa fyra värden och göra en uträkning.

Problemet är att dessa kolumner inte alltid är ifyllda, ibland innehåller dom "0" och ibland är dom helt tomma.

Detta kan inte jag på något sätt styra, då det är utbetalningsstatistik som matats in automatiskt från Excelark.
Mina kolumner:

```
--------------
brutto
bonus
netto
procent
--------------
```

Uträkningen som ska ske:

```
result = (procent / 100) * (netto)
```

Ibland kan det hända att kolumnen *netto* innehåller "0" eller inget alls.

Då ska istället följande uträkning ske:

```
result = (procent / 100) * (brutto - bonus)
```

Så, jag undrar hur jag ska ställa upp allt, för hur jag än gör, så får jag antingen *Typblandningsfel* eller *Ogiltig användning av Round(), strängen är NULL*.

Jag antar att jag måste säkerställa att alla variablar är tal innan jag  gör min uträkning, men får fel hur jag än gör.

Tacksam för alla tips och idéer!

Permalänk: https://www.webforum.nu/p/158046

## #2 — LarsG, 2007-03-10T17:03Z

```
select (procent/100) * 
 case when netto = 0 or netto is null then brutto - bonus else netto end 
    as result
  from t
```

Permalänk: https://www.webforum.nu/p/1944204

## #3 — MickeA.com, 2007-03-10T17:33Z

Hmm, okej.
Hur ska jag få in ovanstående kod i min fråga?

```
sql =	"SELECT " &_
	"id AS id_test, cID, LEFT(pDate, 6) AS pMonth, pPeriod, SUM(nBRake) AS sumBRake, SUM(nBonus) AS sumBonus, SUM(nNettorake) AS nNetto, SUM(nRakeback) AS sumRakeback, nCurrency " &_
	"FROM payout " &_
	"WHERE cID IN " &_
	"(" &_
	"SELECT id " &_
	"FROM customers " &_
	"WHERE nReferer = " & nCustId &_
	") " &_
	"AND pSite = '" & rsSites ("sSajt") & "' " &_
	"GROUP BY pPeriod, cID, pDate, nCurrency, id"
```

De fält den här uträkningen ska baseras på, är:

```
"brutto" = sumBRake
"bonus"  = sumBonus
"netto"  = nNetto
```

Den här kolumnen "procent", hämtas från ett annat ställe längre ner i koden.

Hur ska jag göra?

Permalänk: https://www.webforum.nu/p/1944217

## #4 — Peter S, 2007-03-10T18:03Z

```
sql =	"SELECT " &_
	"id AS id_test," &_
	"cID," &_
	"LEFT(pDate, 6) AS pMonth," &_
	"pPeriod," &_
	"SUM(nBRake) AS sumBRake," &_
	"SUM(nBonus) AS sumBonus," &_
	"SUM(nNettorake) AS nNetto," &_
	"SUM(nRakeback) AS sumRakeback," &_
	"nCurrency," &_
	"(procent/100) * case when netto = 0 or netto is null then brutto - bonus else netto end as result " &_
	"FROM payout " &_
	"WHERE cID IN " &_
	"(" &_
	"SELECT id " &_
	"FROM customers " &_
	"WHERE nReferer = " & nCustId &_
	") " &_
	"AND pSite = '" & rsSites ("sSajt") & "' " &_
	"GROUP BY pPeriod, cID, pDate, nCurrency, id"
```

Var håller *procent* hus?

Permalänk: https://www.webforum.nu/p/1944221

## #5 — MickeA.com, 2007-03-10T20:49Z

> **Peter S skrev:**
>
> Var håller *procent* hus?

Tack för ditt svar, ska testa det där imorrn.
*procent* hämtas från en annan tabell senare och baseras på en del olika saker, därför kan jag inte hämta det i den här frågan.

Permalänk: https://www.webforum.nu/p/1944251

## #6 — Peter S, 2007-03-11T09:49Z

Är det en egen variabel i VBScript blir det till att konkatenera in den i strängen ovan.

Permalänk: https://www.webforum.nu/p/1944315

## #7 — MickeA.com, 2007-03-11T11:26Z

Just det, procent måste ju finns med i frågan för att det ska funka.
*procent* hämtas från ántingen tabell A eller B.
Detta beror på om någon procentsats angetts på anv.basis eller inte.

Såhär ser koden som hämtar procentsatsen ut:

```
sSql =	"SELECT " &_
	"t1.percent_id, t1.percent_site, t1.percent_customer, t1.percent_amount, " &_
	"t2.id, t2.sSitename " &_
	"FROM aws_percent t1 INNER JOIN avasites t2 " &_
	"ON t1.percent_site = t2.id " &_
	"WHERE t2.sSitename = '" & rsSites("sSajt") & "' " &_
	"AND t1.percent_customer = " & nCustId & ""

Set get_percent = conn.Execute(sSql)
If Not get_percent.EOF Then
	percent_amount = csNG(get_percent("percent_amount"))
Else
	If rsSites("sSajt") = "Battlefield" Or rsSites("sSajt") = "PurpleLounge" Then
		percent_amount = 5
	Else
		percent_amount = 2.5
	End If						
End If
Set get_percent = Nothing
```

Det här är nämlingen ett jobb jag tagit över från en annan och koden är en ren katastrof, så jag vill helst inte rota om för mycket saker, för då kanske något annat slutar funka.

Några förslag?

Permalänk: https://www.webforum.nu/p/1944339

## #8 — Peter S, 2007-03-11T11:39Z

Så här kanske:

```
sql =	"SELECT " &_
	"id AS id_test," &_
	"cID," &_
	"LEFT(pDate, 6) AS pMonth," &_
	"pPeriod," &_
	"SUM(nBRake) AS sumBRake," &_
	"SUM(nBonus) AS sumBonus," &_
	"SUM(nNettorake) AS nNetto," &_
	"SUM(nRakeback) AS sumRakeback," &_
	"nCurrency," &_
	"(" & percent_amount & "/100) * case when nNetto = 0 or nNetto is null then SUM(nBRake) - SUM(nBonus) else nNetto end as result " &_
	"FROM payout " &_
	"WHERE cID IN " &_
	"(" &_
	"SELECT id " &_
	"FROM customers " &_
	"WHERE nReferer = " & nCustId &_
	") " &_
	"AND pSite = '" & rsSites ("sSajt") & "' " &_
	"GROUP BY pPeriod, cID, pDate, nCurrency, id"
```

Permalänk: https://www.webforum.nu/p/1944340

## #9 — MickeA.com, 2007-03-11T11:41Z

Okej, hmm, men jag kan väl inte göra så, eftersom "nCustId" blir ett nytt varje gång loopen börjar om?
Procentsatsen blir en ny varje varv.

Permalänk: https://www.webforum.nu/p/1944341

## #10 — Peter S, 2007-03-11T11:51Z

Så procensatsen skall inte ändras efter varje iteration i loopen?

Permalänk: https://www.webforum.nu/p/1944342

## #11 — MickeA.com, 2007-03-11T11:59Z

Jo, för varje rad som skrivs ut, \_kan\_ det hända att procentsatsen ändras.
Så procentsatsen måste tas ut varje varv med hjälp av min kod ovan.

Därför skulle jag hellre försöka lösa det som jag tänkte från början, att man med ifsatser eller liknande gör den här uträkningen.

Permalänk: https://www.webforum.nu/p/1944344

## #12 — Peter S, 2007-03-11T12:07Z

```
if isnull(rs("nNetto")) or rs("nNetto") = 0 then
  result = percent_amount/100 * (rs("sumBRake") - rs("sumBonus"))
else
  result = percent_amount/100 * rs("nNetto")
end if
```

Permalänk: https://www.webforum.nu/p/1944346

## #13 — MickeA.com, 2007-03-11T13:31Z

Hmm, nu får jag samma fel jag hade när jag skrev den här tråden.

```
if isnull(rsMonths("nNetto")) or rsMonths("nNetto") = 0 then
     [b]result = percent_amount/100 * (rsMonths("sumBRake") - rsMonths("sumBonus"))[/b]
else
     result = percent_amount/100 * rsMonths("nNetto")
end if
```

Koden ger *Inkompatibla typer
/rakeback.se/\_newpage/cust_referred.asp, line 261*

Den fetstilta raden är 261.

Permalänk: https://www.webforum.nu/p/1944370

## #14 — Peter S, 2007-03-11T13:33Z

Kan något av fälten vara NULL?

Testa att casta dem med cdbl() eller clng().

Permalänk: https://www.webforum.nu/p/1944372

## #15 — MickeA.com, 2007-03-11T13:35Z

Jo, det är precis här jag stått och stampat hela tiden.
Kör jag med csNG(), cLgn() funkar det tills något värde är NULL då blir det "Otillåten användning av...".
Gör jag en kontroll med tex. isNull eller isEmpty så får jag Inkompatibla typer.

Permalänk: https://www.webforum.nu/p/1944373

## #16 — Peter S, 2007-03-11T13:37Z

Konkatenera med den tomma strängen och kolla om längden \> 0:

```
if len(rsMonths("sumBRake") & "") > 0 then
  'innehållet ok, casta med clng() och utför subtraktion
```

Permalänk: https://www.webforum.nu/p/1944375

## #17 — MickeA.com, 2007-03-11T13:55Z

Nu tror jag att jag fått till det:

```
result = ""
If Len(rsMonths("nNetto") & "") > 0 Then
	nNetto = cdBL(rsMonths("nNetto"))
	result = percent_amount/100 * rsMonths("nNetto")
	result = Round(result, 2)
Else
	If Len(rsMonths("sumBRake") & "") > 0 And Len(rsMonths("sumBonus") & "") > 0 Then
		bruttorake	= cdBL(rsMonths("sumBRake"))
		sumBonus	= cdBL(rsMonths("sumBonus"))
		result = percent_amount/100 * (bruttorake - sumBonus)
		result = Round(result, 2)
	End If
End If
```

Har slutat få massa felmess nu iaf, så vi provar såhär tillsvidare, tack!

Permalänk: https://www.webforum.nu/p/1944383

---

Tråden på webben: https://www.webforum.nu/amne/asp/158046-typblandningsfel-i-uträkning
