---
title: "Räkna svar"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/21476-räkna-svar"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Erik Juhlin"
published: "2001-06-02T14:54:00.000Z"
updated: "2001-06-02T18:58:00.000Z"
replies: 17
views: 292
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/21476-räkna-svar"
---

# Räkna svar

## #1 — Erik Juhlin, 2001-06-02T14:54Z

Jag jobbar lite på ett forum just nu. Jag visar posterna så här:

```
"SELECT * FROM tblForum WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

Men nu vill jag även räkna antalet poster som har AnswerTo = inlägget som visas. Hur skriver man då?

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

## #2 — LarsG, 2001-06-02T15:12Z

```

SELECT count(*) as antalSvar FROM tblForum WHERE AnswerTo = 4711
```

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

## #3 — Erik Juhlin, 2001-06-02T15:16Z

Jo, det vet jag ju. Men det ska bäddas in i min kod.
AnswerCount ska följa med "SELECT \* FROM tblForum WHERE AnswerTo IS NULL ORDER BY PostId DESC" så att jag kan få fram det enkelt för varje tråd sen.

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

## #4 — Erik Juhlin, 2001-06-02T15:28Z

Jag vill skriva något sånt här. :)

```
"SELECT *, AnswerCount(SELECT count(*) AS AnswerCount FROM tblForum WHERE AnswerTo = PostId) FROM tblForum WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

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

## #5 — Erik Juhlin, 2001-06-02T15:31Z

Jag löste det så här:

```
"SELECT *, AnswerCount(SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

Nu vet jag inte om den här koden är så korrekt så rätta gärna mig! :)

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

## #6 — Erik Juhlin, 2001-06-02T16:30Z

Vad är motsatsen till TOP 1?

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

## #7 — Erik Juhlin, 2001-06-02T16:39Z

Löste det med ORDER BY .. DESC. :)

Nu ser koden ut så här:

```
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT MAX(PostDate) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

Säg gärna till om det är något fel med den. :)

Sen så skulle jag behöva göra så att LatestAnswerDate blir samma som m.PostDate om det inte finns några svar. :)

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

## #8 — LarsG, 2001-06-02T16:43Z

Top är bara relevant i samband med sorteringsordning

select top 1 from t order by c asc

post med lägst värde i c

select top 1 from t order by c desc

post med högst värde i c

Om man vill vara portabel (dvs icke micrsoft specifik) så använder man

select min(c)

resp

select max(c)

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

## #9 — Erik Juhlin, 2001-06-02T16:46Z

Okej, men hur löser man mitt andra problem?

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

## #10 — LarsG, 2001-06-02T16:48Z

```
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount,[b]coalesce((SELECT MAX(PostDate) FROM tblForum WHERE AnswerTo = m.PostId),m.postDate)[/b] AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

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

## #11 — Erik Juhlin, 2001-06-02T16:55Z

Det funkar inte för mig. :(

> Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
> \[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] Odefinierad funktion 'coalesce' i uttryck.
> /forum/test.asp, line 8

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

## #12 — LarsG, 2001-06-02T17:27Z

Jag hade för mig att du använde SQL server ;). 

Du kan ju testa så här, osäker om Access stöder det.

```
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount,(SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY PostId DESC"
```

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

## #13 — Erik Juhlin, 2001-06-02T17:41Z

Jag använder det "på jobbet". Hemma använder jag Access.

Det funkar för mig, men jag kan inte sortera efter det. :l

```
sql = "SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY LatestAnswerDate DESC"
```

> Feltyp:
> Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
> \[Microsoft\]\[Drivrutin för ODBC Microsoft Access\] För få parametrar angavs. 1 förväntades.
> /forum/test.asp, line 8

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

## #14 — LarsG, 2001-06-02T17:48Z

Du kan skriva, t.ex. 

```

  select * from t order by 5
```

för att sortera med avseende på det 5:e värdet i select-listan. Det skall egentligen fungera att använda aliaset i order by enligt sql-standarden.

Funktionen iif är specifik för Access.

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

## #15 — Erik Juhlin, 2001-06-02T17:51Z

Hur menar du att man skulle skriva då?

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

## #16 — LarsG, 2001-06-02T18:15Z

I stället för att skriva 

order by LatestAnswerDate 

så använder man det ordningsnummer som LatestAnswerDate har i kolumnlistan och använder det i order by. I och med att du skriver select \*, ... så vet jag inte vilket ordningsnummer det blir.

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

## #17 — Erik Juhlin, 2001-06-02T18:26Z

Det funkar, men trådar med 0 svar hamnar längst upp och sorteras separat. :(

Har skrivit så här:

```
"SELECT *, (SELECT count(*) FROM tblForum WHERE AnswerTo = m.PostId) AS AnswerCount, (SELECT iif(MAX(PostDate) is null,m.postdate,max(postdate)) FROM tblForum WHERE AnswerTo = m.PostId) AS LatestAnswerDate, (SELECT TOP 1 Name FROM tblForum WHERE AnswerTo = m.PostId ORDER BY PostId DESC) AS LatestAnswerName FROM tblForum m WHERE AnswerTo IS NULL ORDER BY 9 DESC"
```

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

## #18 — Erik Juhlin, 2001-06-02T18:58Z

Äsch, skrotar det där och slänger in ett extra fält som uppdateras när man svarar på en tråd. Enkelt att sortera efter. :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/21476-räkna-svar
