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


Slå ihop 2 SQL:er

Postades av 2009-04-15 22:43:52 - Uffe Bengtsson, i forum asp - allmänt, Tråden har 13 Kommentarer och lästs av 1631 personer

Hej!
Jag undrar om det finns ett smidigt sätt att så ihop dessa SQL:er.

<code>strSQL = "SELECT * FROM tblProdukter"

strSQL = "SELECT SUM(AntalPr) AS TotAntalPr, SUM(ForsaljningsPrisPr) AS TotForsaljningsPris, SUM(FullPrisPr) AS TotFullPris FROM tblResultat WHERE tblResultat.ProduktID=" & RS("ProduktID") & " AND tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " AND tblResultat.Datum=#" & FormatDateTime(Date) & "#"</code>

Tackar på förhand


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-16 07:54:03 - Johan Djupmarker

"Slå ihop" är väldigt luddigt formulerat, vad vill du åstadkomma?

/Johan


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-04-16 18:05:56 - Uffe Bengtsson

Ja, det kan jag hålla med om. Jag sitter o rensar upp i gammal kod och hittade en massa
konstigheter. Koden i detta fallet fungerar, men det jag tycker ser konstigt ut är att det öppnas
ett nytt recordset inne i en loop. Så därför skulle jag vilja slå ihop SQL:erna för att få det att se lite
bättre ut.

<code>
<%
Set RS = Server.CreateObject("ADODB.Recordset")

strSQL = "SELECT * FROM tblProdukter"


Set RS = Conn.Execute(strSQL)

Do until RS.EOF
strSQL1 = "SELECT SUM(AntalPr) AS TotAntalPr, SUM(ForsaljningsPrisPr) AS TotForsaljningsPris," &_
"SUM(FullPrisPr) AS TotFullPris FROM tblResultat WHERE tblResultat.ProduktID=" & RS("ProduktID") & "" &_
"AND tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " AND" &_
"tblResultat.Datum=#" & FormatDateTime(Date) & "#"


Set RS1 = Conn.Execute(strSQL1)
Do until RS1.EOF

%>
<tr>
<td class="rubrik10Border">
<input name="ProduktID" type="hidden" value="<%=RS("ProduktID")%>"><%=RS("ProduktNamn")%>
</td>
<td align="center" class="text10Border">
<input name="AntalPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border">
<input name="FullPrisPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border">
<input name="ForsaljningsPrisPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border"><%=RS1("TotAntalPr")%></td>
<td align="center" class="text10Border"><%=RS1("TotFullPris")%></td>
<td align="center" class="text10Border"><%=RS1("TotForsaljningsPris")%></td>
</tr>
<%

RS1.MoveNext
Loop
RS1.Close
Set RS1 = Nothing
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
%>
</code>


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-16 20:48:05 - Jonas Boman

<code:asp>
<%
strSQL1 = "SELECT p.ProduktID, p.ProduktNamn, SUM(r.AntalPr) AS TotAntalPr, SUM(r.ForsaljningsPrisPr) AS TotForsaljningsPris," &_
" SUM(r.FullPrisPr) AS TotFullPris FROM tblResultat r INNER JOIN tblProdukter p ON r.ProduktID=p.ProduktID " &_
" WHERE r.PersonalID=" & intPersonalID & " AND r.ButikID=" & intButikID & " " &_
" AND r.Datum=#" & FormatDateTime(Date) & "#"

Set RS = Conn.Execute(strSQL1)
Do until RS.EOF
%>
</code>
jag gjorde bara en INNER JOIN

Och så får du ersätta alla RS1 med RS


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-16 20:55:06 - Thomas Vanhaniemi

Något i stil med följande borde fungera. Säkerställ dock att dina variabler "intPersonalID", "intButikID" och "Date" är säkra, alltså att du kontrollerar att de är den datatyp de borde vara och innehåller den data de borde innehålla.

<%
strSQL = "SELECT tblProdukter.ProduktID, tblProdukter.ProduktNamn, SUM(tblResultat.AntalPr) AS TotAntalPr, SUM(tblResultat.ForsaljningsPrisPr) AS TotForsaljningsPris, SUM(tblResultat.FullPrisPr) AS TotFullPris FROM tblProdukter, tblResultat " &_
		"WHERE tblResultat.ProduktID = tblProdukter.ProduktID AND tblResultat.PersonalID = " & intPersonalID & " AND tblResultat.ButikID = " & intButikID & " AND tblResultat.Datum = #" & FormatDateTime(Date) & "# " &_
		"GROUP BY tblResultat.ProduktID"

Set RS = Conn.Execute(strSQL)

Do until RS.EOF
%>
<tr>
<td class="rubrik10Border">
<input name="ProduktID" type="hidden" value="<%=RS("ProduktID")%>"><%=RS("ProduktNamn")%>
</td>                                
<td align="center" class="text10Border">
<input name="AntalPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border">
<input name="FullPrisPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border">
<input name="ForsaljningsPrisPr" type="text" class="clsInput" value="0" size="8" <%=DisableForm%>></td>
<td align="center" class="text10Border"><%=RS("TotAntalPr")%></td>
<td align="center" class="text10Border"><%=RS("TotFullPris")%></td>
<td align="center" class="text10Border"><%=RS("TotForsaljningsPris")%></td>
</tr>
<%
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
%>


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-04-17 07:58:05 - Uffe Bengtsson

Hej Jonas!
Det blev så här enligt ditt förslag Jonas o då fick jag felmeddelandet:

Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'ProduktID'.

Går det att fixa?

<code>
strSQL = "SELECT tblProdukter.ProduktID, tblProdukter.ProduktNamn, " &_
"SUM(tblResultat.AntalPr) AS TotAntalPr, " &_
"SUM(tblResultat.ForsaljningsPrisPr) AS TotForsaljningsPris, " &_
"SUM(tblResultat.FullPrisPr) AS TotFullPris " &_
"FROM tblResultat INNER JOIN tblProdukter ON tblResultat.ProduktID=tblProdukter.ProduktID " &_
"WHERE tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " " &_
"AND tblResultat.Datum=#" & FormatDateTime(Date) & "#"
</code>

MVH Uffe


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-17 08:20:57 - Thomas Vanhaniemi

Om du ser på mitt exempel måste du använda dig av en GROUP BY i SQL satsen för att gruppera ihop raderna.


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-04-17 08:29:34 - Uffe Bengtsson

Jepp, jag har testat det förslaget oxå. Så nu ser SQL:en ut så här:

<code>
strSQL = "SELECT tblProdukter.ProduktID, tblProdukter.ProduktNamn, " &_
"SUM(tblResultat.AntalPr) AS TotAntalPr, " &_
"SUM(tblResultat.ForsaljningsPrisPr) AS TotForsaljningsPris, " &_
"SUM(tblResultat.FullPrisPr) AS TotFullPris " &_
"FROM tblResultat INNER JOIN tblProdukter ON tblResultat.ProduktID=tblProdukter.ProduktID " &_
"WHERE tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " " &_
"AND tblResultat.Datum=#" & FormatDateTime(Date) & "#" &_
"GROUP BY tblProdukter.ProduktID, tblProdukter.ProduktNamn"
</code>

Problemet nu är att då listas bara produkterna om det finns en relaterad post i tblResultat. Alla posterna i tblProdukter ska visas oavsett om det finns något i tabellen tblResultat eller inte.

Går det att fixa?


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-17 09:26:15 - Thomas Vanhaniemi

Visst, med en LEFT JOIN.
<code>
strSQL = "SELECT tblProdukter.ProduktID, tblProdukter.ProduktNamn, " &_
"SUM(tblResultat.AntalPr) AS TotAntalPr, " &_
"SUM(tblResultat.ForsaljningsPrisPr) AS TotForsaljningsPris, " &_
"SUM(tblResultat.FullPrisPr) AS TotFullPris " &_
"FROM tblResultat LEFT JOIN tblProdukter ON tblResultat.ProduktID=tblProdukter.ProduktID " &_
"WHERE tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " " &_
"AND tblResultat.Datum=#" & FormatDateTime(Date) & "#" &_
"GROUP BY tblProdukter.ProduktID"
</code>


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-04-17 11:13:09 - Uffe Bengtsson

Testade din variant samt en right join men jag får inte fram alla posterna i tblProdukter


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-17 12:33:38 - Thomas Vanhaniemi

Vad kör du för databas? Såg att select skedde på tblResultat istället för på tblProdukter, men en RIGHT JOIN tidigare borde vara samma som nedanstående LEFT JOIN.
Problemet sitter i WHERE delen, då alla tblResultat kolumner kommer att vara NULL då en JOIN inte gjorts.
<code>
strSQL = "SELECT tblProdukter.ProduktID, tblProdukter.ProduktNamn, " &_
"SUM(tblResultat.AntalPr) AS TotAntalPr, " &_
"SUM(tblResultat.ForsaljningsPrisPr) AS TotForsaljningsPris, " &_
"SUM(tblResultat.FullPrisPr) AS TotFullPris " &_
"FROM tblProdukter LEFT JOIN tblResultat ON tblResultat.ProduktID=tblProdukter.ProduktID " &_
"WHERE tblResultat.ProduktID IS NULL OR (tblResultat.PersonalID=" & intPersonalID & " AND tblResultat.ButikID=" & intButikID & " " &_
"AND tblResultat.Datum=#" & FormatDateTime(Date) & "#)" &_
"GROUP BY tblProdukter.ProduktID"
</code>


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-04-17 14:14:09 - Uffe Bengtsson

Jag kör en access-databas. Resultatet blev detsamma då det inte finns några värde med null i kolumnen tblResultat.ProduktID


Svara

Sv: Slå ihop 2 SQL:er

Postades av 2009-04-17 14:25:54 - Thomas Vanhaniemi

SQL satsen jag skickade senast kontrollerar inte NULL värden från tabellen, utan från det sammanfogade resultatet. Det är nämligen så att om inte ProductID från produkttabellen kan kopplas ihop med någon rad från resultat tabellen kommer resultattabellens alla fält att vara NULL på den raden i det sammanfogade resultatet.


Svara

Sv:Slå ihop 2 SQL:er

Postades av 2009-05-04 16:55:40 - Uffe Bengtsson

Jepp, jag får lämna idén med sammanslagna SQL:er. Har du tips på hur man kan lösa det? Kanske nån array eller nått.

Häls Uffe


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

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 569 153
27 952
271 704
753
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