oskarsMedlem sedan nov. 20051 317 inlägg Hallå!
Jag har en liten fråga :)
Kan jag summera ihop massa olika tal från en tabell i samma SQL-fråga?
Så här ungefär:
SELECT * FROM minTabell COUNT(intAlt = 1) AND COUNT(intAlt2 = 1) AND COUNT(intAlt3 = 1) WHERE sID = 200
och så loopar man ut det så att det ser ut så här typ:
sID intAlt intAlt2 intAlt3
200 10 5 12
Den ska alltså summera ihop antal poster som har exempelvis intAlt = 1 och där sID = 200
Nu kan jag förstå om jag förklarat konstigt, men jag hoppas ni förstår!
Går det att göra så här?
:stud
Peter SMedlem sedan dec. 20025 483 inlägg SELECT SUM(case when intAlt = 1 then 1 else 0 end)
, SUM(case when intAlt2 = 1 then 1 else 0 end)
, SUM(case when intAlt3 = 1 then 1 else 0 end)
FROM minTabell
WHERE sID = 200
oskarsMedlem sedan nov. 20051 317 inlägg kooolt! Tack tack!
Men hur skriver jag när jag ska loopa ut de ihopräknade siffrorna? :)
Tack återigen!
oskarsMedlem sedan nov. 20051 317 inlägg
Peter S skrev:
SELECT SUM(case when intAlt = 1 then 1 else 0 end)
, SUM(case when intAlt2 = 1 then 1 else 0 end)
, SUM(case when intAlt3 = 1 then 1 else 0 end)
FROM minTabell
WHERE sID = 200
typ så här?
SELECT SUM(case when intAlt = 1 then 1 else 0 end) AS antal1
, SUM(case when intAlt2 = 1 then 1 else 0 end) AS antal2
, SUM(case when intAlt3 = 1 then 1 else 0 end) AS antal3
FROM minTabell
WHERE sID = 200
Ska testa det snart :D :D :D :D
oskarsMedlem sedan nov. 20051 317 inlägg Njaeh, den vill inte...
kolla här:
<table width="100%" border="0" cellpadding="5" cellspacing="0" style="margin:0 0 20px 0;background:#9999ff;text-align:left;">
<tr style="background:#333;color:#FFF;">
<td width="50%"><b>Namn</b></td>
<td width="10%"><b>Ordrar#</b></td>
<td width="20%"><b>Telefonånger</b></td>
</tr>
<%
getDatabase = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=; DATABASE=; UID=;PASSWORD=; OPTION=3"
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open = getDatabase
Set Recset = Server.CreateObject("ADODB.Recordset")
SQL = "Select * FROM Users WHERE Grad = 1 ORDER BY Namn asc"
RecSet.Open SQL, Connect, 1, 2
If RecSet.EOF Then
Response.Write("Tomt!")
Else
Color = "EEE"
Do Until RecSet.EOF
' Summa antalet KOrder = 1 och antalet KOrder = 2
Set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as antalOrdrar, SUM(case when KOrder = 2 then 1 else 0 end) as antalTelanger FROM Arkiv WHERE sID = '"&RecSet("sID")&"'")
antalOrdrar = oCount("antalOrdrar")
antalTelanger = oCount("antalTelanger")
oCount.close
Set oCount=nothing
procentAntal = procentAntalGS + procentAntalOrdrar
%>
<tr style="background:#<%=Color%>;">
<td><%=RecSet("Namn")%></td>
<td><%=antalOrdrar%></td>
<td><%=antalTelanger%></td>
</tr>
<%
If Color = "EEE" Then
Color = "FCFCFC"
Else
Color = "EEE"
End If
RecSet.MoveNext
Loop
End If
%>
</table>
Feltyp: ADODB.Recordset (0x800A0CC1) Objektet kunde inte hittas i mängden med det begärda namnet eller numret.
Vad har jag gjort för fel?
@ndersMedlem sedan juni 200032 969 inlägg Vilken rad pekar felet på då?
oskarsMedlem sedan nov. 20051 317 inlägg Set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as antalOrdrar, SUM(case when KOrder = 2 then 1 else 0 end) as antalTelanger FROM Arkiv WHERE sID = '"&RecSet("sID")&"'")
:)
@ndersMedlem sedan juni 200032 969 inlägg TJa, då finns väl inte fältet sID i RecSet?
oskarsMedlem sedan nov. 20051 317 inlägg Det fungerar så otroligt vackert nu! Jag tror inte ni vill veta hur jag löste samma problem på ett annat sätt! Då måste ni säga till i så fall :D
oskarsMedlem sedan nov. 20051 317 inlägg Hur gör jag om jag vill hämta två olika data från två olika tabeller på samma sätt?
säg att jag vill kolla om intAlt1 = 1 i minTabell1 och intAlt2 = 1 i minTabell2
hm... och hur gör man egenltigen för att sortera efter t.ex "antalOrdrar".. ORDER BY antalOrdrar funkar inte i SQL-frågan ovan!
LarsGMedlem sedan dec. 200012 464 inlägg
säg att jag vill kolla om intAlt1 = 1 i minTabell1 och intAlt2 = 1 i minTabell2
Kan du vara mer specifik? Ge exempel på datainnehåll och förväntat resultat.
hm... och hur gör man egenltigen för att sortera efter t.ex "antalOrdrar".. ORDER BY antalOrdrar funkar inte i SQL-frågan ovan!
På vilket sätt fungerar det inte? Återigen, var mer specifik.
oskarsMedlem sedan nov. 20051 317 inlägg
LarsG skrev:
säg att jag vill kolla om intAlt1 = 1 i minTabell1 och intAlt2 = 1 i minTabell2
Kan du vara mer specifik? Ge exempel på datainnehåll och förväntat resultat.
.
Summering av antal poster, precis som ovan :)
LarsG skrev:
hm... och hur gör man egenltigen för att sortera efter t.ex "antalOrdrar".. ORDER BY antalOrdrar funkar inte i SQL-frågan ovan!
På vilket sätt fungerar det inte? Återigen, var mer specifik.
Kort och gott så sorteras inte listan efter det jag specificerat. Det rör sig inte överhuvudtaget. :r
LarsGMedlem sedan dec. 200012 464 inlägg Det är fortfarande för vagt.
oskarsMedlem sedan nov. 20051 317 inlägg Ska försöka lösa mitt sista problem här...
Med följande kod, får jag följande felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E31)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.24a-community-nt]The used SELECT statements have a different number of columns
Jag har trippelkollat så att dom båda tabellerna har rätta antalet kolumner, och alla kolumnerna har rätt egenskaper... varför funkar det inte för? Det jag vill göra är att räkna ihop lite grejer (vad ser ni nedanför) från 2st olika kolumner!
' Summa antalet KOrder = 1 och antalet KOrder = 2
Set oCount = Connect.Execute("SELECT SUM(case when KOrder = 1 then 1 else 0 end) as antalOrdrar, " & _
"SUM(case when KOrder = 2 then 1 else 0 end) as antalTelanger, " & _
"SUM(case when KOrder = 3 then 1 else 0 end) as antalReturer, " & _
"SUM(case when KOrder = 4 then 1 else 0 end) as antalAA, " & _
"SUM(case when KOrder = 6 then 1 else 0 end) as antalSlutbetalda " & _
"FROM Arkiv WHERE sID = '"&RecSet("Namn")&"' " & _
"UNION SELECT SUM(case when KOrder = 5 then 1 else 0 end) as antalEjgodkanda " & _
"FROM ArkivUtanOrdernummer WHERE sID = '"&RecSet("Namn")&"'")
antalOrdrar = oCount("antalOrdrar")
antalTelanger = oCount("antalTelanger")
antalReturer = oCount("antalReturer")
antalAA = oCount("antalAA")
antalSlutbetalda = oCount("antalSlutbetalda")
antalEjgodkanda = oCount("antalEjgodkanda")
oCount.close
Set oCount=nothing
@ndersMedlem sedan juni 200032 969 inlägg Du måste ha samma antal fält i dina UNION-delar.
SELECT första_fältet, andra_fältet, tredje_fältet
UNION
SELECT fjärde_fältet, femte_fältet, sjätte_fältet
inte
SELECT första_fältet, andra_fältet, tredje_fältet, fjärde_fältet, femte_fältet
UNION
SELECT sjätte_fältet
Om du vill ha med en till summa från en annan tabell, lägg med det som en subquery då istället.
oskarsMedlem sedan nov. 20051 317 inlägg Jag har sökt på "sub query" på google... och fått fram det här: http://www.smart-soft.co.uk/Oracle/advanced-sql-tutorial.htm
nu är frågan hur jag gör en subquery tíll min sql-fråga... har försökt att fixa det själv innan jag frågar, men jag förstår inte riktigt hru man gör :/
@ndersMedlem sedan juni 200032 969 inlägg Det som är inom parentes är din subquery:
SELECT
första_fältet, andra_fältet, tredje_fältet, fjärde_fältet, femte_fältet,
(SELECT sjättefältet FROM någon_tabell) AS sjätte_fältet
FROM
tabell
...