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 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.
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 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)
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.
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