Och hur är det med DISTINCT. Kan man välja vilken ordning den plocka de enskilda sakerna?
Om jag skriver ORDER BY dPostCreationDate, går den i den ordningen då?
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
16 svar · 194 visningar · startad av Erik Juhlin
Jag har den här SQLen:
SELECT DISTINCT ISNULL(iPostParentId, iPostId) AS iPostThreadId FROM tblForumPost p
Och den gör vad jag vill att den ska göra (tror jag). Problemet är bara att jag vill få ut resten av kolumnenrna och inte bara iPostThreadId.
Skriver jag , p.* efter så får jag ett felmeddelande. :l
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
Och hur är det med DISTINCT. Kan man välja vilken ordning den plocka de enskilda sakerna?
Om jag skriver ORDER BY dPostCreationDate, går den i den ordningen då?
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
Vadå resten av kolumnerna? Distinct gäller alltid för alla kolumner i select-listan.
Hur då plockar de enkilda sakerna?
------------------
essentitia preter non sans multiplicandum
Aha, men jag vill liksom bara ha DISTINCT på "kolumnen" iPostThreadId. Sen vill jag att resten av kolumnerna bara ska hänga på...
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
Jag vill alltså göra en SELECT *, men inte ha med samma iPostThreadId mer än en gång.
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
postid!c1
---------
1.....!kalle
1.....!nisse
om du bara vill ha distinct postid, men alla kolumner, vilken av posterna kalle eller nisse skall du då returnera?
Om du säger att det gör det samma så är det något fel i din datamodell.
------------------
essentitia preter non sans multiplicandum
Jag vill ha den med lägst id eller tidigast dPostCreationDate.
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
Tabellen kan se ut ungefär så här:
iPostId iPostClubId iPostMemberId iPostParentId sPostSubject sPostBody dPostCreationDate
25 1 3 NULL Hej! Text... 2001-11-05 23:50:12.523
26 1 4 25 NULL Txt.. 2001-11-06 00:01:38.780
27 1 3 25 NULL Txt... 2001-11-06 14:23:44.003
Jag vill att när man söker på "." så ska man bara få fram den första tråden. Den som är förälder och har iPostId 25. Och iPostThreadId ska vara 25.
Söker man på "txt" så ska man få fram den andra som har iPostId 26. iPostThreadId ska då också vara 25.
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
[Redigerat av Erik Juhlin den 06 nov 2001]
Finns det sen ett helt annat inlägg med bodyn Txt... så vill jag att den ska visas.
Därför tycker jag att SQLen jag skrev först verkar funka utmärkt. Men av den får jag ju inte ut de andra kolumnerna.
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
select coalesce(iPostParentId,iPostId), tabellen.* from tabellen
where iPostId in (select min(iPostid) from tabellen
where sPostBody like '%Txt%'
group by iPostparentId)
------------------
essentitia preter non sans multiplicandum
Hjälp vad krångligt det blev genast.
Vad gör coalesce?
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
coalesce är likvärdig med isnull men den är standard.
------------------
essentitia preter non sans multiplicandum
Så här fick jag skriva för att få det att funka:
select coalesce(iPostParentId,iPostId), tabellen.* from tabellen
where iPostId in (select min(iPostid) from tabellen
where sPostBody like '%Txt%'
group by coalesce(iPostparentId, iPostId))
Eftersom att LarsGs kod inte funkade som den skulle och min gjorde det så måste det betyda att jag är bättre än honom på SQL! ;) :e
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
[Redigerat av Erik Juhlin den 07 nov 2001]
Glömde att visa ändringen. Ändringen var ju:
group by coalesce(iPostparentId, iPostId)
Men om jag vill ha andra villkor, t.ex.:
WHERE iPostClubId = 2
WHERE sPostSubject LIKE '%..%'
WHERE iPostMemberId = 1
WHERE dPostCreationDate > CONVERT(DATETIME, '2001-11-07 15:01:15.000', 21)
Var skriver jag dessa då? Innanför parantesen eller sist?
------------------
/Erik
www.juhlin.nu /sk8files/ /mp2d/
I subselecten är bättre ur prestandasynpunkt. Resultatmässigt så går det på ett ut så vitt jag kan se.
Testa!
------------------
essentitia preter non sans multiplicandum