---
title: "problem med distinct"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/170941-problem-med-distinct"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Vinnaren"
published: "2008-04-21T15:55:34.000Z"
updated: "2008-04-22T07:32:14.000Z"
replies: 7
views: 685
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/170941-problem-med-distinct"
---

# problem med distinct

## #1 — Vinnaren, 2008-04-21T15:55Z

har följande:

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

Tacksam för all hjälp  :stud

Permalänk: https://www.webforum.nu/p/170941

## #2 — Peter S, 2008-04-21T15:59Z

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?

Permalänk: https://www.webforum.nu/p/2102318

## #3 — Vinnaren, 2008-04-21T16:05Z

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.

Permalänk: https://www.webforum.nu/p/2102319

## #4 — LarsG, 2008-04-21T16:27Z

Varför har du med denna om du bara vill visa kategoriinnehåll?

```
isnull(p.PostId, 0) AS PostId,
```

Permalänk: https://www.webforum.nu/p/2102327

## #5 — Vinnaren, 2008-04-21T16:31Z

det är för att jag ska kunna få ut id:t till den senaste uppdaterade inlägget.

Som jag har den nu får jag ut följande:

```
CategoryId  Name                                               PostId      Topics      Replies     LastPost                       
----------- -------------------------------------------------- ----------- ----------- ----------- ------------------------------ 
3           Test                                             1           2           1           Apr 20 2008  9:56PM            
3           Test                                             3           2           1           Apr 20 2008  9:56PM            
3           Test                                             4           2           1           Apr 20 2008  9:24PM
```

Permalänk: https://www.webforum.nu/p/2102328

## #6 — LarsG, 2008-04-21T17:14Z

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

Permalänk: https://www.webforum.nu/p/2102341

## #7 — Vinnaren, 2008-04-21T18:41Z

kanon, fungerar perfa.

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

Tacksam för all hjälp  :stud

Permalänk: https://www.webforum.nu/p/2102384

## #8 — LarsG, 2008-04-22T07:32Z

```
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

Permalänk: https://www.webforum.nu/p/2102458

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/170941-problem-med-distinct
