/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MSSQL select problem
Fra : Bent Jensen


Dato : 24-01-08 12:21

Hej NG

Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
samme indhold i feltet. Altså en slags modsat distinct


Hvis tabellen eksempelvist ser sådan her ud

ID Felt
1 abc
2 bla
3 abc
4 noget
5 noget andet
6 bla
7 abc

Vi jeg have udvalgt emnerne med ID 1,2,3,6 og 7

Er der nogen der kan hjælpe mig med det?


 
 
Gert Krabsen (24-01-2008)
Kommentar
Fra : Gert Krabsen


Dato : 24-01-08 12:47

Bent Jensen (slet B8X36) skrev:
> Hej NG
>
> Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
> samme indhold i feltet. Altså en slags modsat distinct
>
>
> Hvis tabellen eksempelvist ser sådan her ud
>
> ID Felt
> 1 abc
> 2 bla
> 3 abc
> 4 noget
> 5 noget andet
> 6 bla
> 7 abc
>
> Vi jeg have udvalgt emnerne med ID 1,2,3,6 og 7
>
> Er der nogen der kan hjælpe mig med det?


SELECT tabel.felt, Count(tabel.id) AS Antal
FROM tabel
GROUP BY tabel.felt
HAVING (Count(tabel.id)>1);

Henrik Davidsen (04-02-2008)
Kommentar
Fra : Henrik Davidsen


Dato : 04-02-08 22:06

>> Jeg vil meget gerne vælge alle de emner hvor mere end et emne har
>> samme indhold i feltet. Altså en slags modsat distinct

> SELECT tabel.felt, Count(tabel.id) AS Antal
> FROM tabel
> GROUP BY tabel.felt
> HAVING (Count(tabel.id)>1);

Hvis du bruger MSSQL2005 kan man også benytte den lidt mere eksotiske
ROW_NUMBER funktion:

WITH CTE_temp
AS
(
SELECT
ID,
ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) AS RowNumber
FROM dinTabel
)

SELECT ID
FROM CTE_temp
WHERE RowNumber = 2

Det kan muligvis også klares uden brug af en CTE (jeg har dog ikke testet om
denne syntax spiller)

SELECT ID
FROM dinTabel
WHERE ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) = 2

/Sjang
MSCTS




Henrik Davidsen (05-02-2008)
Kommentar
Fra : Henrik Davidsen


Dato : 05-02-08 20:05

> Det kan muligvis også klares uden brug af en CTE (jeg har dog ikke testet
> om denne syntax spiller)
>
> SELECT ID
> FROM dinTabel
> WHERE ROW_NUMBER() OVER(PARTITION BY Felt ORDER BY ID) = 2

Jeg har testet det nu, og det kan man ikke. ROW_NUMBER kan kun bruges i en
order by eller en select.

/Sjang




Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste