ja, jag vet... jag kan inte göra ordentliga SQL-frågor.
Set oCount1 = Connect.Execute("SELECT COUNT(*) AS antal1 FROM Users WHERE Projekt = "&RecSet("ID")&" AND sID ='"&Session("userID")&"' AND AK = 0 AND GS = 0 AND KOrder = 0")
Set oCount2 = Connect.Execute("SELECT COUNT(*) AS antal2 FROM Users WHERE Projekt = "&RecSet("ID")&" AND sID ='"&Session("userID")&"' AND AK = 1 AND GS = 0 AND KOrder = 0")
Set oCount3 = Connect.Execute("SELECT COUNT(*) AS antal2 FROM Users WHERE Projekt = "&RecSet("ID")&" AND sID ='"&Session("userID")&"' AND GS = 1 AND KOrder = 0")
Set oCount4 = Connect.Execute("SELECT COUNT(*) AS antal4 FROM Users WHERE Projekt = "&RecSet("ID")&" AND sID ='"&Session("userID")&"' AND KOrder = 1")
Adresser = oCount1("antal1")
AK = oCount2("antal2")
GS = oCount3("antal3")
Ordrar = oCount4("antal4")
Set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as antalOrdrar, " & _
"SUM(case when KOrder = 0 AND AK = 1 AND GS = 0 then 1 else 0 end) as antalAK " & _
"FROM Users WHERE sID = '"&Session("user")&"' AND Projekt = "&RecSet("ID")&"")
set oCount = Connect.Execute("SELECT COUNT(*) AS antal FROM Users WHERE sID ='"&Session("userID")&"' AND KOrder = 1")
intMinaOrdrar = oCount("antal")
set oCount = Connect.Execute("SELECT COUNT(*) AS antal FROM Users WHERE sID ='"&Session("userID")&"' AND KOrder = 3")
intMinaAtgardas = oCount("antal")
set oCount = Connect.Execute("SELECT COUNT(*) AS antal FROM Nyhetsbrev WHERE sID ='"&Session("userID")&"' AND KOrder = 33")
intMinaReturer = oCount("antal")
Jag gör alla dessa SQL-frågor för att få ut statistik från databasen... det är alltså bara siffror jag vill ha ut. Jag vet hur man gör om det är olika siffror från samma tabell, men här är det ju hundra olika siffror från hundra olika tabeller... :o
Vill någon visa mig ett exempel på hur jag gör om dessa SQL-frågor? Eller kanske visa ett exempel på hur man gör flera COUNT(*) med olika villkor i flera olika tabeller. Alltså en fråga per tabell, fast flera frågor i en SQL-sträng..
Det beror väl på att du valt att hämta olika antal kolumner i dina SELECT-satser, snarare än hur många faktiska kolumner som råkar finnas i respektive tabell? Tror jag?!
Så här ser SQL-strängen ut som jag får felmeddelandet med...
set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as intMinaOrdrar, " & _
"SUM(case when KOrder = 3 then 1 else 0 end) as intMinaAtgardas " & _
"FROM Adresser2006 WHERE sID = '"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger, " & _
"SUM(case when KOrder = 3 then 1 else 0 end) as intMinaReturOK, " & _
"SUM(case when KOrder = 33 then 1 else 0 end) as intMinaReturer, " & _
"SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA " & _
"FROM Arkiv WHERE sID ='"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA_Arkiv, " & _
"SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger_Arkiv, " & _
"SUM(case when KOrder = 5 then 1 else 0 end) as intMinaEjGodkanda " & _
"FROM ArkivUtanOrdernummer WHERE sID ='"&Session("userID")&"' AND KOrder = 33")
precis som headbug skriver - du hämtar olika antal "fält" i dina delfrågor i UNION.
I den första hämtar du två värden, i den andra hämtar du fyra, och i den sista hämtar du tre.
set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as intMinaOrdrar, " & _
"NULL, NULL, SUM(case when KOrder = 4 then 1 else 0 end) as intMinaAtgardas " & _
"FROM Adresser2006 WHERE sID = '"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger, " & _
"SUM(case when KOrder = 3 then 1 else 0 end) as intMinaReturOK, " & _
"SUM(case when KOrder = 33 then 1 else 0 end) as intMinaReturer, " & _
"SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA " & _
"FROM Arkiv WHERE sID ='"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA_Arkiv, " & _
"NULL, SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger_Arkiv, " & _
"SUM(case when KOrder = 5 then 1 else 0 end) as intMinaEjGodkanda " & _
"FROM ArkivUtanOrdernummer WHERE sID ='"&Session("userID")&"'")
När jag kör denna koden så får jag följande felmeddelande:
Rad: 30
Kolumn: -1
Beskrivning: Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
Rad 30:
intMinaReturer = oCount("intMinaReturer")
Den verkar inte vilja ta fram några siffror från UNION 1 och UNION 2... Why oh why?
Du måste sätta fältnamnen på den översta frågan i din UNION. Vad som står i de undre har ingen som helst betydelse.
Dessutom får du tre poster, det är du med på? Du måste alltså köra movenext en gång, hämta dina värden från select nummer 2, köra movenext och sedan hämta värdena från select nummer 3.
En rad/post i ett recordset kan ju inte ha egna namn på fälten. Därför sätts fältnamnen i den överst frågan.
Om du sätter fältnamn i de två under ignoreras de.
Om du kör följande fråga:
SELECT 1 AS Foo, 2 AS Bar, 3 AS Foobar
UNION
SELECT 2 AS Bla, 1 AS Wee, 4 AS Woo
UNION
SELECT 5 AS Peh, 3 AS Kah, 1 AS Blii
Så kommer ditt recordset se ut så här:
Foo Bar Foobar
1 2 3
2 1 4
5 3 1
Om du nu förstår hur resultatet ser ut, blir det nog lättare för dig att hämta ut dina värden.
Frågan är om det inte är lättare att lösa med subqueries - resultatet blir iaf lättare att tolka.
Jo när du skriver SELECT och sedan gör en UNION på andra tabeller så måste du veta vad den RESULTERANDE mish-mashens kolumner heter.
Detta bestäms alltså av vad kolumnerna har för namn i FÖRSTA frågan.
Om du studerar din första fråga så heter kolumnerna
intMinaOrdrar, vaddå?, vaddå? samt intMinaAtgardas
Så du får skriva NULL as kolumn2, NULL as kolumn3 eller vad du nu vill att dom ska heta så att du kan plocka ut dina värden ur det resulterande UNION-svaret.
/red: jaja, jag tänker för länge när jag formulerar mig :)
Nu när jag försöker loopa igenom recsetet så hittar den alla siffror i första frågan, men stoppar sig direkt på andra frågan. Men jag har inte gjort ändringarna du skrev i senaste inlägget, för jag förstår dom inte...
Så du tror subqueries är bättre? Men det känsn som att jag är så nära att lyckas med UNION ALL nu... men vad är det för ändringar jag måste göra för att få ordning på min fråga? Jag vet att du skrev det i senaste inlägget, men jag förstod inte....
:r :stud
EDIT: Nu såg jag Headbugs inlägg!!! Ska testa det!!!
set oCount = Connect.Execute(""& _
"SELECT SUM(case when KOrder = 1 then 1 else 0 end) as intMinaOrdrar, " & _
"SUM(case when KOrder = 4 then 1 else 0 end) as intMinaAtgardas, NULL as Null1, NULL as Null2 " & _
"FROM Adresser2006 WHERE sID = '"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger, " & _
"SUM(case when KOrder = 3 then 1 else 0 end) as intMinaReturOK, " & _
"SUM(case when KOrder = 33 then 1 else 0 end) as intMinaReturer, " & _
"SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA " & _
"FROM Arkiv WHERE sID ='"&Session("userID")&"' UNION ALL " & _
"SELECT SUM(case when KOrder = 44 then 1 else 0 end) as intMinaAA_Arkiv, " & _
" SUM(case when KOrder = 2 then 1 else 0 end) as intMinaTelefonanger_Arkiv, " & _
"SUM(case when KOrder = 5 then 1 else 0 end) as intMinaEjGodkanda, NULL as Null3 " & _
"FROM ArkivUtanOrdernummer WHERE sID ='"&Session("userID")&"'")
Tal = 0
Do Until oCount.EOF
Tal = Tal + 1
If Tal = 1 Then
intMinaOrdrar = oCount("intMinaOrdrar")
intMinaAtgardas = oCount("intMinaAtgardas")
ElseIf Tal = 2 Then
intMinaTelefonanger = CInt(oCount("intMinaTelefonanger"))
intMinaReturOK = oCount("intMinaReturOK")
intMinaReturer = oCount("intMinaReturer")
intMinaAA = oCount("intMinaAA")
ElseIf Tal = 3 Then
intMinaAA = CInt(intMinaAA) + CInt(oCount("intMinaAA_Arkiv"))
intMinaTelefonanger = CInt(intMinaTelefonanger) + CInt(oCount("intMinaTelefonanger_Arkiv"))
intMinaEjGodkanda = oCount("intMinaEjGodkanda")
End If
oCount.MoveNext
Loop
Men jag får följande felmeddelande:
Rad: 39
Kolumn: -1
Beskrivning: Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
Hur kan jag få in fältnamnen från fråga2 och fråga3 i fråga1?
Skriv dit dem! Flytta upp namngivningen till första frågan!!!
//I princip har du
SELECT K1 as intMinaOrdrar, K2 as intMinaAtgardas, K3 as Null1, K4 as Null2
FROM ....
UNION ALL
SELECT K1 as intMinaTelefonanger, K2 as intMinaReturOK, K3 as intMinaReturer, K4 as intMinaAA
FROM ....
UNION ALL
SELECT K1 as intMinaAA_Arkiv, K2 as intMinaTelefonanger_Arkiv, K3 as intMinaEjGodkanda, K4 as Null3
FROM...
I resultatet kommer ALLA K1 att få samma namn, alla K2 att få samma namn osv... Och det namn de får är det namn de får i den första SELECT-satsen. Alltså: intMinaOrdrar, intMinaAtgardas, Null1, och Null2
Tänk så här: Alla dessa rader hamnar i SAMMA tabell, självklart kan varje kolumn i den tabellen bara ha ett kolumnnamn. :)
271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e