---
title: "Problem med DISTINCT i en sök fråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/183434-problem-med-distinct-i-en-sök-fråga"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Vinnaren"
published: "2010-05-08T18:35:35.000Z"
updated: "2010-05-10T17:23:09.000Z"
replies: 12
views: 1789
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/183434-problem-med-distinct-i-en-sök-fråga"
---

# Problem med DISTINCT i en sök fråga

## #1 — Vinnaren, 2010-05-08T18:35Z

Hej!

Har följande:

```
SELECT DISTINCT u.UserName, ISNULL(ual.Status, 10) AS Status, 
ISNULL(ual.ActiveDate, ISNULL(lg.CreateDate, '1970-01-01 00:00:00')) AS LastActive,
r.RoleName, ISNULL(ui.Avatar, ''), ISNULL(lg.Action, ''), ISNULL(at.Message, '')

FROM aspnet_Users AS u
INNER JOIN aspnet_UsersInRoles AS uir
ON uir.UserId = u.UserId
LEFT OUTER JOIN UserInfo AS ui
ON u.UserName = ui.UserName
LEFT OUTER JOIN UserActLog AS ual
ON ual.UserName = u.UserName
LEFT OUTER JOIN UserLog AS lg
ON lg.UserName = u.UserName
INNER JOIN ActionType AS at
ON at.Type = lg.Type
INNER JOIN aspnet_Roles AS r
ON r.RoleId = uir.RoleId
INNER JOIN aspnet_Membership as m
ON m.UserId = u.UserId

WHERE
(u.UserName LIKE '%'+@UserName+'%' OR @UserName = '') AND
(ISNULL(ual.ActiveDate, ISNULL(lg.CreateDate, '1970-01-01 00:00:00')) >= @LastActive or YEAR(@LastActive) = 1970) AND
(r.RoleName = @RoleName OR @RoleName = '')
ORDER BY u.UserName ASC
```

Jag vill enbart ha ut samma användarnamn(u.UserName) en gång. Som det är nu kommer det flera gånger. Det är kolumnerna  lg.Action samt at.Message som 'ställer' till det.

Hur ska jag få det att det enbart visas en gång? Anv MSSQL.

Tacksam för all hjälp  :stud

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

## #2 — SPiN, 2010-05-09T12:10Z

```
...
group by
   u.UserName
order by
   u.UserName asc
```

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

## #3 — Vinnaren, 2010-05-09T19:20Z

Tack, har redan provat detta, och får felmeddelandet "Column ual.Status is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. ORDER BY items must appear in the select list if SELECT DISTINCT is specified". 
Skulle iof gå att slå ihop de två sista kolumnerna, o sen splita de i koden, men är nog inte så optimalt, måste ju finnas nån lösning på det hela?  :q

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

## #4 — Peter S, 2010-05-09T19:46Z

Eftersom du får flera Action och Message för varje användare så måste du bestämma vilken Action och Message du vill visa; är det det senaste Action resp. Message, eller spelar det kanske ingen roll? Om det inte spelar någon roll så behöver du ju inte ta med dessa kolumner i select-listan.

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

## #5 — Vinnaren, 2010-05-10T05:06Z

Ja, det är den senaste lg.Action som jag vill ha ut, at.Message är typnamnet till lg.Action. :stud

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

## #6 — doggelito, 2010-05-10T05:58Z

Gör en subselect vetja! :)

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

## #7 — Vinnaren, 2010-05-10T07:24Z

mjo, har funderat på det. Men den kan enbart returnera ett värde? Vill ju ha ut både at.Message och lg.Action.

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

## #8 — doggelito, 2010-05-10T09:25Z

Visst är det så och därför gör du två subselects! :)

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

## #9 — Vinnaren, 2010-05-10T11:04Z

Är det bättre än o slå ihop två kolumner till en, o sen köra split på dessa för att få ut bägge?  :i :q (prestandamässigt )

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

## #10 — doggelito, 2010-05-10T12:34Z

Krångla inte till det! ;)
<http://en.wikipedia.org/wiki/KISS_principle>

Ett alternativ annars är att göra en speciell vy i MS SQL som hämtar exakt det du vill hämta.
När man är inne på optimering så är det lätt att börja i fel ände, två subselects är i regel inget prestandaproblem.

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

## #11 — Vinnaren, 2010-05-10T16:25Z

Haha, jo, det har du nog rätt i. Tack, får köra på det  ;)

Ett annat litet problem jag har med samma sql fråga är TOP. Jag skickar in hur många rader jag vill ha från SP. Men hur skriver jag detta?

Har provat med:

```
SELECT DISTINCT TOP @Unit u.UserName .....
```

Men får felmeddelandet "incorrect syntax near '@Unit'"
 :r

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

## #12 — Peter S, 2010-05-10T16:45Z

TOP (@Unit)

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

## #13 — Vinnaren, 2010-05-10T17:23Z

aha, givetvis, tack  :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/183434-problem-med-distinct-i-en-sök-fråga
