webForumDet fria alternativet

får ut dubletter

Databaser & SQLur Databashanterare & SQL

14 svar · 476 visningar · startad av Vinnaren

VinnarenMedlem sedan sep. 2005833 inlägg
#1

Har följande:

SELECT e.EventId, e.NeedEntries, e.Header, e.Message, CONVERT(VARCHAR(11), e.Date, 113) AS Date,

(SELECT COUNT(ChildId) FROM ChildToEvent WHERE ChildId = @ChildId AND EventId = e.EventId AND Status = 1)
 as Status,

CASE
WHEN e.Date < getdate() then 'past'
WHEN e.Date = getdate() then 'today'
ELSE 'coming' END AS DateStatus,

d.Name AS DepartmentName,

ISNULL((SELECT Message FROM ChildToEvent WHERE ChildId = @ChildId AND EventId = e.EventId), '') AS ChildMessage

FROM Event AS e

INNER JOIN EventToDepartment AS etd
ON e.EventId = etd.EventId

INNER JOIN Department AS d
ON etd.DepartmentId = d.DepartmentId

WHERE (d.PreschoolId = @SchoolId OR @SchoolId = 0)
AND (etd.DepartmentId = @DepartmentId OR @DepartmentId = 0)
AND (DatePart("ww", e.Date) = @Week OR @Week = 0)
AND (YEAR(e.Date) = @Year OR @Year = 0)

GROUP BY e.Header, e.Message, e.Date, e.EventId, e.NeedEntries, d.Name
ORDER BY e.Date DESC

Problemet är att jag får ut tre likadana event, jag vill bara ha ut samma event endast en gång. Antar att det är:
INNER JOIN EventToDepartment AS etd
ON e.EventId = etd.EventId

som spökar, finns tre rader där.

Någon som har en lösning??

Tacksam för all hjälp :stud

Peter SMedlem sedan dec. 20025 483 inlägg
#2

Lägg till DISTINCT om de resultatrader du får är identiska.

VinnarenMedlem sedan sep. 2005833 inlägg
#3

tack, men det e redan provat, det hjälper inte :(

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Då är inte raderna identiska m.a.o?

VinnarenMedlem sedan sep. 2005833 inlägg
#5

de är exakt likadana, bortsett från en sak, varje event hämtas ut men med olika DepartmentId, dvs nyheten visas en gång för varje department.

Måste ju gå o lösa så att varje EventId enbart visas en gång?

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Ja, ta bort departmentId eftersom den inte verkar behövas. Annars måste du bestämma dig för vilket departmentId som skall visas.

VinnarenMedlem sedan sep. 2005833 inlägg
#7

mjo, men problemet ligger här då:
AND (etd.DepartmentId = @DepartmentId OR @DepartmentId = 0)
När @DepartmentId = 0 då vill jag ju få ut eventet en gång, skickar jag in 0 nu så blir det fel. Borde väll finnas någon lösning för detta?

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Förresten, med departmentId menar du departmentName? Jag kan inte se någon departmentId i SELECT-listan.

VinnarenMedlem sedan sep. 2005833 inlägg
#9

oj, ja det e departmentName jag menar :S

Peter SMedlem sedan dec. 20025 483 inlägg
#10

Okej :)

Av de rader du får ut nu, spelar det någon roll vilket departmentName som visas?

VinnarenMedlem sedan sep. 2005833 inlägg
#11

nej, det kvitar

Peter SMedlem sedan dec. 20025 483 inlägg
#12

Då kan du ta bort det fältet helt från SELECT- och GROUP BY-listan och problemet är löst :)

VinnarenMedlem sedan sep. 2005833 inlägg
#13

ok, tack, nu fungerar det.

En liten fundering på samma sql-fråga.

Har en variabel @Unit, när den inte = 0 så ska så många poster visas som @Unit innehåller, annars ska samtliga poster visas.

Går det att lösa?

Peter SMedlem sedan dec. 20025 483 inlägg
#14

Då får du nog bygga upp SQL-frågan dynamiskt och inkludera TOP om @Unit != 0.

VinnarenMedlem sedan sep. 2005833 inlägg
#15

ok, tack, får försöka :D

120 ms totalt · 3 externa anrop · v20260731065814-full.94fcd635
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
117 ms — hämta tråd, inlägg och bilagor (db)