webForumDet fria alternativet

problem med sql-fråga

5 svar · 304 visningar · startad av andreas_lindh

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#1

jag har den här frågan

Select t.nummer,t.namn,l.namn as lag,
(case when m.spelar_ID=statistik.SpelarId then 1 else 0 end) as goals,
(case when m.ass_id=s.SpelarId then 1 else 0 end) + sum(case when m.ass_id1=statistik.SpelarId then 1 else 0 end) as ass,
(sum(case when m.spelar_ID=statistik.SpelarId then 1 else 0 end) + sum(case when m.ass_id=statistik.SpelarId then 1 else 0 end) + sum(case when m.ass_id1=statistik.SpelarId then 1 else 0 end)) as points
from statistik, matchfakta as m
left join trupper as t on statistik.spelarID = t.id
left join s_deltagande_lag as l on statistik.LagID = l.id
where statistik.spelarID in(m.spelar_id,m.ass_id,m.ass_id1)
and statistik.serieID =SerieID & " and m.serieID = SerieID & " and statistik.lagID=" & _visa & " and m.borttagen = 0 and m.vilken = 'goal'
group by statistik.spelarID,t.nummer,t.namn,l.namn
order by 6 desc, 4 desc

jag får det här felmeddelandet

System.Data.SqlClient.SqlException: The column prefix 'statistik' does not match with a table name or alias name used in the query.
LarsGMedlem sedan dec. 200012 464 inlägg
#2
Select t.nummer,t.namn,l.namn as lag,
(case when m.spelar_ID=statistik.SpelarId then 1 else 0 end) as goals,
(case when m.ass_id=s.SpelarId then 1 else 0 end) + sum(case when m.ass_id1=statistik.SpelarId then 1 else 0 end) as ass,
(sum(case when m.spelar_ID=statistik.SpelarId then 1 else 0 end) + sum(case when m.ass_id=statistik.SpelarId then 1 else 0 end) + sum(case when m.ass_id1=statistik.SpelarId then 1 else 0 end)) as points
from statistik inner join  matchfakta as m
on statistik.spelarID in(m.spelar_id,m.ass_id,m.ass_id1)
left join trupper as t on statistik.spelarID = t.id
left join s_deltagande_lag as l on statistik.LagID = l.id
where statistik.serieID =SerieID & " and m.serieID = SerieID & " and statistik.lagID=" & _visa & " and m.borttagen = 0 and m.vilken = 'goal'
group by statistik.spelarID,t.nummer,t.namn,l.namn
order by 6 desc, 4 desc

Jag tycker mig ha upplevt att SQL server, helt icke standardmässigt, har problem om man blandar implicita och explicita joins.

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#3

Tack :)

Nu fick jag ett nytt felmeddelande

System.Data.SqlClient.SqlException: Column 'l.namn' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Om jag tar med l.namn i group by blir det fel. Kan man lösa det med en fråga eller ska jag köra en fråga till för att hämta lagnamnet?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Varför blir det fel då?

Finns det alltså olika l.namn inom de kolumner du grupperar på? I så fall vilket av dessa namn vill du ha?

Mysql väljer ju något (slumpmässigt).

För att få igenom frågan så kan du alltid applicera en aggregatfunktion på l.namn i select-listan. T.ex. max(l.namn)

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#5

Du kan se hur det blir här
http://www.tibroik.com/ShowDPoints.aspx?serieID=42

Samma spelare kommer med flera gånger istället för att poängen räknas ihop.

andreas_lindhMedlem sedan jan. 20011 140 inlägg
#6

Nu har jag löst det.

CREATE PROCEDURE statUte
@serieID int
AS
Select t.namn, t.nummer,mf.serieid,t.lagID,l.namn as lag,
sum(case when mf.spelar_ID = s.spelarID then 1 else 0 end) as goals,
sum(case when mf.ass_ID = s.spelarID then 1 else 0 end) + sum(case when mf.ass_ID1 = s.spelarID then 1 else 0 end) as ass,
sum(case when mf.spelar_ID = s.spelarID then 1 else 0 end) + sum(case when mf.ass_ID = s.spelarID then 1 else 0 end) + sum(case when mf.ass_ID1 = s.spelarID then 1 else 0 end) as points
from trupper as t inner join statistik as s
on s.spelarID = t.id left join
matchfakta as mf on mf.ass_id = s.spelarID or mf.spelar_ID = s.spelarID or  mf.ass_id1 = s.spelarID
left join s_deltagande_lag as l on l.id = t.lagID
where mf.serieID =@serieID and s.serieID = mf.serieID and mf.vilken ='goal'
and mf.borttagen = 0
group by t.namn,t.lagID,l.namn,mf.serieid,t.nummer,s.spelarID order by points Desc, goals Desc
GO
136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)