SELECT DISTINCT(c.CategoryId), c.Name, isnull(p.PostId, 0) AS PostId,
(SELECT COUNT(PostId) FROM forum_Post WHERE CategoryId = c.CategoryId AND ParentPostId = 0) AS Topics,
(SELECT COUNT(PostId) FROM forum_Post WHERE CategoryId = c.CategoryId AND ParentPostId != 0) AS Replies,
isnull(isnull(CAST(ISNULL((select max(date) from forum_post
where ParentPostId = p.PostId), p.Date) as varchar), ''),'Finns inga poster i denna kategori') AS LastPost
FROM forum_Category AS c
LEFT OUTER JOIN forum_Post AS p
ON p.CategoryId = c.CategoryId
WHERE c.ParentCategoryId = @CategoryId
ORDER BY CategoryId ASC
Jag vill få ut varje kategori en gång. Nu får jag ut kategorin för varje inlägg som finns. Hur löser man detta?
Distinct fungerar inte på det sättet. Distinct appliceras på hela SELECT-listan. Så det du måste fråga dig är följande: av två eller flera rader med samma kategori, vilken av dem vill jag visa?
Det kvittar vilken av kattegorierna som visas då de har samma id och namn. Det är kategorierna som e själva "huvud" delen i frågan. Det är dem jag vill ha information om.
SELECT c.CategoryId,
c.Name,
coalesce(max(postid),0) as PostId,
sum(case when parentPostid = 0 then 1 else 0 end) as topics,
sum(case when ParentPostId <> 0 then 1 else 0 end) AS replies,
coalesce(cast(max(p.date) as varchar(20)),'Finns inga poster i denna kategori') AS LastPost
FROM forum_Category AS c
LEFT OUTER JOIN forum_Post AS p
ON p.CategoryId = c.CategoryId
WHERE c.ParentCategoryId = @CategoryId
group by c.CategoryId,
c.Name
Jag tog bort din order by då categoryid alltid har samma värde.
En liten sak bara, kan man när p.date inte är null och det innehåller samma datum som dagens skriva ut "idag kl: 20:37" och för gårdagens "igår kl: 20:37". Äldre skrivs ut med datumet Mån 21 apr, 2008 20:37???
case when max(p.date) is not null then
case when datediff(dd,getdate(),max(p.date)) = 0 then
'idag kl:' + substring(convert(varchar(20),max(p.date),8),1,5)
else cast(max(p.date) as varchar(20)) end
else 'Det finns inga poster' end
ungefär
257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849