andreas_lindhMedlem sedan jan. 20011 091 inlägg
Jag håller på med en sp för att söka efter personer
ALTER PROCEDURE portal_searchCoaches
@moduleID int,
@name nvarchar(100),
@club nvarchar(100),
@educationID int,
@year int
AS
Select c.*,e.EducationID,e.year from
portal_coach as c
left join portal_personeducations as e
on e.personID = c.coachID
where
club like '%' + @club + '%'
and name like '%' + @name + '%'
and e.educationID = @educationID
and e.year >= @year
order by c.name
Nu vill jag kolla om tex @club är 0 så ska inte den vara med i where satsen och om @educationID är 0 så ska inte den vara med.
Har provat med
ALTER PROCEDURE portal_searchCoaches
@moduleID int,
@name nvarchar(100),
@club nvarchar(100),
@educationID int,
@year int
AS
Select c.*,e.EducationID,e.year from
portal_coach as c
left join portal_personeducations as e
on e.personID = c.coachID
where
case when @club <> '' then club like '%' + @club + '%' end
and name like '%' + @name + '%'
and e.educationID = @educationID
and e.year >= @year
order by c.name
Men det fungerar inte.
Finns det något enkelt sätt att göra det eller måste jag skapa if satser med alla kombinationer?
LarsGMedlem sedan dec. 200012 465 inlägg
or (e.educationID = @educationID or @educationID = 0)
andreas_lindhMedlem sedan jan. 20011 091 inlägg
Ny fråga. En person kan ha gått flera utbildningar och därför finnas med flera gånger i tabellen portal_personeducations.
Sen när man söker kommer samma person upp flera gånger och jag vill bara att varje person kommer upp en gång.
Går detta att fixa direkt i sql-frågan?
LarsGMedlem sedan dec. 200012 465 inlägg
Jo, det går. Vilken post vill du ha när det finns flera?
Varför använder du en left join när du ändå ställer villkor på den högra tabellen i where?
andreas_lindhMedlem sedan jan. 20011 091 inlägg
Frågan ser ut så här nu
Select c.coachID,c.name,c.club,c.city,e.EducationID,e.year from
portal_coach as c
left join portal_personeducations as e
on e.personID = c.coachID
where club like '%' + @club + '%'
and (name like '%' + @name + '%')
and (e.educationID = @educationID or @educationID = 0)
and (e.year >= @year or @year = 0)
and moduleID = @moduleID
order by c.name
Left join köär jag bara för att det inte är säkert att personer hart gått någon utbildning.
Det spelar ingen roll vilken post jag får när det finns flera. Det enda som är viktigt är att jag bara får ut varje coachID en gång
LarsGMedlem sedan dec. 200012 465 inlägg
Select c.coachID,
c.name,c.club,c.city,
max(EducationID),
max(e.year)
from portal_coach as c
left join portal_personeducations as e
on e.personID = c.coachID
where club like '%' + @club + '%'
and (name like '%' + @name + '%')
and (e.educationID = @educationID or @educationID = 0)
and (e.year >= @year or @year = 0)
and moduleID = @moduleID
group by c.coachID,c.name,c.club,c.city
order by c.name
andreas_lindhMedlem sedan jan. 20011 091 inlägg