webForumDet fria alternativet

får ut dubletter

Databaser & SQLur Databashanterare & SQL

14 svar · 476 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#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

Medlem sedan dec. 20025 483 inlägg
#2

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

Medlem sedan sep. 2005833 inlägg
#3

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

Medlem sedan dec. 20025 483 inlägg
#4

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

Medlem 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?

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

Medlem 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?

Medlem sedan dec. 20025 483 inlägg
#8

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

Medlem sedan sep. 2005833 inlägg
#9

oj, ja det e departmentName jag menar :S

Medlem 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?

Medlem sedan sep. 2005833 inlägg
#11

nej, det kvitar

Medlem 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 :)

Medlem 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?

Medlem sedan dec. 20025 483 inlägg
#14

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

Medlem sedan sep. 2005833 inlägg
#15

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

125 ms totalt · 3 externa anrop · v20260731065814-full.8a4e7caf
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)