webForumDet fria alternativet

SQL fråga som inte gör som jag vill

Databaser & SQL

7 svar · 309 visningar · startad av mattiasnordin

Medlem sedan maj 20012 080 inlägg
Frågan#1
sql = "SELECT Namn, COUNT(1) AS Antal, COUNT(0) AS NegAntal FROM sport_bokningar "
sql = sql & " GROUP BY Namn ORDER BY 2 DESC, 3 DESC"

Jag vill skapa en fråga som räknar ut antalet personer som har deltagit i ett viss happening (=1 i Status kolumnen i min tabell) och som dessutom sorterar dem i ordningen mest frekventa besökare överst. Min fråga fungerade innan jag började krångla till det hela... Deltagarna fyller även i om de inte kan deltaga (=0 i status kolumnen)...
Det jag nu försöker lägga till i min fråga är att den ska sortera i första hand på de som kommer (=1) och i andra hand på de som inte kommer (=2)...

Jag får inte något fel när jag kör frågan ovan men både "Antal" och "NegAntal" blir samma värde vilket inte stämmer...

Please help...

Medlem sedan maj 20012 080 inlägg
#2
sql = "SELECT Namn, COUNT(Status) AS Antal FROM sport_bokningar "
sql = sql & " WHERE Status = 1 GROUP BY Namn ORDER BY 2 DESC" 

sql2 = "SELECT Namn, COUNT(Status) AS NegAntal FROM sport_bokningar "
sql2 = sql2 & " WHERE Status = 0 GROUP BY Namn ORDER BY 2 DESC"

Hmmm... Tydligen så fungerar inte Count som jag trodde. Ovan fungerar som jag vill MEN hur slår jag ihop dessa frågor så att det blir en och samma record set????

Medlem sedan dec. 200012 464 inlägg
#3
select namn, 
          sum(case when status = 1 then 1 else 0 end) as s1,
                     sum(case when status = 0 then 1 else 0 end) as s2
from sport_bokningar where status in (1,2) 
group by name order by s1,s2

Sen så beror det på vilken databashanterare du har om det fungerar eller inte

Medlem sedan maj 20012 080 inlägg
#4
sql = "select namn, " 
sql = sql & " sum(case when status = 1 then 1 else 0 end) as s1, "
sql = sql & " sum(case when status = 0 then 1 else 0 end) as s2 "
sql = sql & " from sport_bokningar where status in (1,2) "
sql = sql & " group by name order by s1,s2 "

Ger följande fel:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'sum(case when status = 1 then + 1 else 0 end)'. 

/kopia av staff_sport/page_design.asp, line 36

Jag kör access 97 som databas...

Spelar du innebandy, Lars G? :q

Medlem sedan dec. 200012 464 inlägg
#5

Ok, access-specifik lösning

sql = "select namn, " 
sql = sql & " sum(iif(status = 1,1,0) as s1, "
sql = sql & " sum(iif(status = 0,1,0) as s2 "
sql = sql & " from sport_bokningar where status in (0,1) "
sql = sql & " group by name order by 2,3 "

Spelar du innebandy, Lars G?

Jo, understundom händer det.

Medlem sedan maj 20012 080 inlägg
#6

Hmmm... verkar som att jag har hittat en utmaning år SQL Guden Lars G... Inte varje dag...

Får följande fel när jag kör din fråga x(

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'sum(iif(status = 1,1,0) as s1, sum(iif(status = 0,1,0) as s2 from sport_bokningar where status in (0,1) group by name order by 2,3'. 

/kopia av staff_sport/page_design.asp, line 43

Rad 43 är som vanligt: "set rs = connect.execute(sql)"

PS Har ni bredband så är det, om inte bra musik, en otroligt trevlig DJ som jobbar på denna radiostation. Hon är online nu (webcam). §e
Se http://www.topradio.be/windowsmedia/topavhi.asx
DS

Medlem sedan dec. 200012 464 inlägg
#7

Äsch då, det är bara parenteser som saknas

sql = "select namn, " 
sql = sql & " sum(iif(status = 1,1,0)) as s1, "
sql = sql & " sum(iif(status = 0,1,0)) as s2 "
sql = sql & " from sport_bokningar where status in (0,1) "
sql = sql & " group by name order by 2,3 "
Medlem sedan maj 20012 080 inlägg
#8

Du är verkligen gud på det här !!!! :f

sql = "select Namn, " 
sql = sql & " sum(iif(Status = 1,1,0)) as Antal, "
sql = sql & " sum(iif(Status = 0,1,0)) as NegAntal "
sql = sql & " from sport_bokningar where Status in (0,1) "
sql = sql & " group by Namn order by 2 DESC,3 DESC "

Fungerar hur bra som helst. Resultatet är perfekt. Så mycket lättare livet blir när man lär sig skriva lite mer advancerade frågor istället för att sortera med ifsatser och liknande... glad som fan"!

'sql = "SELECT Namn, COUNT(Status) AS Antal FROM sport_bokningar "
'sql = sql & " WHERE Status = 1 GROUP BY Namn ORDER BY 2 DESC" 
'sql = sql & " UNION "
'sql = sql & " SELECT Namn, COUNT(Status) AS NegAntal FROM sport_bokningar "
'sql = sql & " WHERE Status = 0 GROUP BY Namn ORDER BY 2 DESC"

Jag labbade lite med UNION men fick inte det resultatet jag ville ha. Men som sagt jag är inte gud på detta... Man lär sig varje dag..

Angående innebandyn, vi är ett par datanissar i Uppsala som spelar innebandy på Torsdagar klockan 21:00. Vi behöver mer folk så är du intresserad så får du höra av dig. // Mattias

268 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)