Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 14:15:50 - Marie Fredriksson, i forum databaser, Tråden har 17 Kommentarer och lästs av 1480 personer

Jag har en databas där jag söker fram antal planerade leveranser per månad, och sedan presenterar dem i en tabell. Sql-frågan ser ut så här (jag har fler villkor, men för enkelhets skull så utelämnar jag dem här):

<code>
SqlLevJan = "SELECT SUM(antal) FROM levplan WHERE manad = 1 "
Set LevJan = Connect.Execute(SqlLevJan)

.... övrig kod....

<%=LevJan(0)%>
</code>

"Antal" i databasen har oftast värdet 1, men kan ha andra värden också, det är därför jag summerar antalen i stället för att bara räkna posterna. Jag adderar också "LevJan" med andra frågor mot databasen längre ner i tabellen.

Detta fungerar på det stora hela bra, men jag får problem när det inte finns några databasposter som matchar frågorna - det blir väl ett null-värde som inte går att skriva ut som "0", och inte heller addera med andra frågor. I övrigt går det att köra hela sidan utan felmeddelande i browsern.

Jag har experimenterat med olika kombinationer av isnull, coalesce och case, men får inte fram något resultat i alla fall. Jag vill presentera en fråga utan databasträffar som "0", och kunna addera den med andra värden. Vet inte om det ska gå att få fram det resultat jag är ute efter på det här sättet, om jag använde fel syntax eller om det är något annat som spökar. Kan någon hjälpa mig? Är det lämpligt att använda isnull, coalesce (tror inte det, eftersom resultatet i sig blir null?), case eller något annat? Och hur ser korrekt syntax ut? Jag har surfat runt ett par timmar och letat idag men inte blivit klokare för det...

Tackar på förhand!

/m


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 14:32:01 - Håkan Borneland

Hej!

En lösning för SQL Server.

SELECT ISNULL(SUM(ISNULL(antal, 0)), 0) FROM levplan WHERE (manad = 1)

Beror ju på vilken DB du använder.

//Håkan


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 14:44:34 - Marie Fredriksson

Sorry, jag visste väl att det var nåt jag glömde.... Access 2003. Hur blir det då?

/m


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:06:04 - Håkan Borneland

Det var värre, har ingen koll på hur det skrivs i Access 2003

//Håkan


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:17:03 - Håkan Borneland

Slog lite i hjälpen för Access 2003, och hittade det här:
<b>Nz(Sum(Nz([antal], 0)), 0)</b>
Testa.

//Håkan


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:23:08 - Marie Fredriksson

Hmm. Vad är "Nz" i det här fallet? Använder jag ovanstående rakt av får jag:

Microsoft JET Database Engine error '80040e14'
Undefined function 'Nz' in expression.

???

/m


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:30:59 - Håkan Borneland

Jaaaa du, det var värre.
Hittade det i hjälpen för Access 2003, så Access borde veta vad det är för något.

//Håkan


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:43:13 - Andreas Hillqvist

<b>Jag har en databas där jag söker fram antal planerade leveranser per månad, och sedan presenterar dem i en tabell.</b>

Vill du loopa ut samtliga månader så är det effektivare att göra med en fråga:

Dim rs
Dim con

Dim M
Dim Lev(12)

	Set con = CreateObject("ADODB.Connection")
	con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" + _
	         "Data Source=" & Server.MapPath("db.mdb") & ";" + _
	         "Mode=Share Deny None;"

	Set rs = CreateObject("ADODB.Recordset")

	rs.Open "SELECT manad, SUM(antal) AS tot_antal" + vbCrLf + _
	        "FROM levplan" + vbCrLf + _
	        "GROUP BY manad", con
	        
	Do Until rs.EOF 
		Lev(rs("manad").Value) = rs("tot_antal").Value
		rs.MoveNext
	Loop

	rs.Close 
	con.Close
%>
.... övrig kod.... 

<table>
	<tr>
		<th>January</th>
		<th>February</th>
		<th>March</th>
		...
		<th>November</th>
		<th>December</th>
	</tr>
	<tr>
		<td><%=CLng(Lev(1))%></td>
		<td><%=CLng(Lev(2))%></td>
		<td><%=CLng(Lev(3))%></td>
		...
		<td><%=CLng(Lev(11))%></td>
		<td><%=CLng(Lev(12))%></td>
	</tr>
</table>


Genom att då lagra bara de månader som finns i arrayen så kan du få de tomma värdena till 0 genom att använda CLng(). Detta fungerar bara på tomma variabler/arrayer inte på null värden från databas.


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 15:59:45 - Håkan Borneland

Kunde inte låta bli att grotta lite till i detta, och se hur man kan göra i Access 2003.
Fick den här koden att göra samma som koden för SQL Server.

<code>SELECT IIf( ISNULL(SUM(antal)), 0, SUM(antal)) FROM levplan WHERE manad = 1</code>

//Håkan


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 16:03:48 - Håkan Borneland

<b>Andreas:</b> Du som kan det här med Access 2003.
Vad är <b>Nz</b> som dom skriver om i hjälpen för Access 2003?
Vaför får inte Marie det att fungera?
(Nyfiken).

//Håkan


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 16:18:16 - Marie Fredriksson

Andreas och Håkan: Båda era förslag funkar fint (fast Andreas' med arrayer etc gick lite ovanför mitt huvud - jag ska kolla noggrannare på det i morgon, för det verkar effektivare). Tack så hemskt mycket!!

/m


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 16:20:57 - Jan Bulér

Nz i Access är motsvarande ISNULL i SQL-server eller IFNULL i MySql.

x = Nz(Uttryck, Värde om uttryck är NULL)


Du bör kunna skriva så här,

SqlLevJan = "SELECT SUM(Nz(antal, 0)) AS tot_antal FROM levplan WHERE manad = 1 "



Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 18:12:06 - Andreas Hillqvist

Det är väl effektivare att skriva:

SqlLevJan = "SELECT Nz(SUM(antal), 0) AS tot_antal FROM levplan WHERE manad = 1 "

Anropa funktinoen En gång istället för varje post.

Då null påverkar inte summan kan man göra på detta sättet.


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 19:54:43 - Jan Bulér

@Andreas.

Håller med dig, jag skrev på ditt sätt som svar på en annan fråga och fick där mothugg och påståendet att det kan bli problem i vissa fall, jag har dock inte fått någon förklaring till vilka problem det kan bli.


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-25 20:37:58 - Andreas Hillqvist

Om man har AVG() funktionen så skulle jag kunna se att det ställer till det.
Men inte för sum.


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-26 08:27:32 - Per Persson

Jag hade litet bråttom att komma med "mothugg" i den tråden. Det stämmer nog att det inte kan bli problem vid SUM(), men i andra fall kan det bli det.


Svara

Sv: Hur gör man när Sql Sum blir Null?

Postades av 2006-10-26 13:15:03 - Lars Berg

Det blir skillnad om det inte finns några poster som uppfyller villkoret.

<code>
select sum(nz(c,0)) from where false
</code>

returnerar null

<code>
select nz(sum(c),0) from where false
</code>

returnerar 0

Om man har group by med, som i den andra tråden, så har det ingen betydelse.


Svara

Sv:Hur gör man när Sql Sum blir Null?

Postades av 2006-10-26 16:57:02 - Andreas Hillqvist

Tack för att du förtudliga detta.

Jag ser däremot ingen vinst i att använda:
<code>
SELECT SUM(nz(antal,0)) FROM levplan WHERE manad = 1
</code>

Eftersom resultatet är detsamma som :
<code>
SELECT SUM(antal) FROM levplan WHERE manad = 1
</code>

Det finns ingen vinst i denna fråga.

Däremot finns det en stor förlust då resultatet innehåller poster, då dyrt och onödigt för detta resultatet funktionsanrop utförs för samtliga poster.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 613
27 958
271 741
5 893
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies