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