Endast visa duplikationer Microsoft SQL server

Trädvy Permalänk
Medlem
Plats
Hallunda
Registrerad
Okt 2009

Endast visa duplikationer Microsoft SQL server

Tjena!
Håller på med ett projekt där jag har följande lista som visas när jag anropar den.

Namn
Agda
Agda
Bertil
Cissi
Cissi
Klas
Kalle
Per
Per

Jag vill endast visa namn som förekommer två gånger. hur gör jag det?
Den här lista får jag efter jag anropar den med en query men vill endast visa alla namn som förekommer minst två gånger.
Tacksam för all hjälp!

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Maj 2013

select Name from table group by Name having count(*) > 1 eller något i den stilen borde väl fungera?

Trädvy Permalänk
Medlem
Plats
Karlskrona
Registrerad
Jan 2006

@aniik:
Jag skulle använda mig av "HAVING"
Exempel:

SELECT NAME, COUNT(NAME) AS NumName FROM USER GROUP BY NAME HAVING COUNT(NAME) = 2

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Trädvy Permalänk
Medlem
Plats
Hallunda
Registrerad
Okt 2009

@NoPaiN^:
När jag lägger in count(name) as numname så ser jag i tabellen att vissa blir så här

Namn numname
agda 1
agda 1
Bertil 1
Cissi 2
Cissi 1

Så när jag skiver having count(name) = 2 så inkluderas inte Agda. Hur kommer det sig?
min kod ser ut på följande sätt som är en stored procedure:

alter procedure spGetLatest
@ECU nvarchar(20),
@Identifier nvarchar(20),
@Value nvarchar(20)
as
Begin
Select Name,ECU, Identifier, Value, Max(Filetime) as "latestfile", count(ecu) as numname from dbo.view_1
group by Name, ECU, Identifier, Value
Having ECU IN (Select Item from [dbo].[SplitString](@ECU,',')) and Identifier IN (SELECT Item FROM [dbo].[SplitString]( @Identifier, ',' ) ) and Value IN (Select Item FROM [dbo].[SplitString](@Value,','))

ORDER BY
MAX(Name) ASC

End

Exec spGetLatest 'EBS7,ALM1', '87,88', '2459579,2387988'

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av aniik:

@NoPaiN^:
När jag lägger in count(name) as numname så ser jag i tabellen att vissa blir så här

Namn numname
agda 1
agda 1
Bertil 1
Cissi 2
Cissi 1

Så när jag skiver having count(name) = 2 så inkluderas inte Agda. Hur kommer det sig?
min kod ser ut på följande sätt som är en stored procedure:

alter procedure spGetLatest
@ECU nvarchar(20),
@Identifier nvarchar(20),
@Value nvarchar(20)
as
Begin
Select Name,ECU, Identifier, Value, Max(Filetime) as "latestfile", count(ecu) as numname from dbo.view_1
group by Name, ECU, Identifier, Value
Having ECU IN (Select Item from [dbo].[SplitString](@ECU,',')) and Identifier IN (SELECT Item FROM [dbo].[SplitString]( @Identifier, ',' ) ) and Value IN (Select Item FROM [dbo].[SplitString](@Value,','))

ORDER BY
MAX(Name) ASC

End

Exec spGetLatest 'EBS7,ALM1', '87,88', '2459579,2387988'

Du grupperar fel (på allt). Om du vill ha fram all data för rader med duplicerade namn måste du först plocka fram rätt rader, vilket du gör med en group by:

select name from view_1 group by name having count(*) > 1

Genom att sedan använda denna query som en sub-query kan du få fram all data du vill ha:

select * from view_1 where name in ( select name from view_1 group by name having count(*) > 1 )

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Hallunda
Registrerad
Okt 2009

@Teknocide:
Menar du något så här?

Select Name,ECU, Identifier, Value, Max(Filetime) as "latestfile", count(*) as numname from dbo.view_1
group by Name, ECU, Identifier, Value
Having ECU IN (Select Item from [dbo].[SplitString]('EBS7',',')) and Identifier IN (SELECT Item FROM [dbo].[SplitString]( '88,87', ',' ) ) and Value IN (Select Item FROM [dbo].[SplitString]('2459579,2431629',','))

ORDER BY
MAX(Name) ASC;
select name from view_1
group by name
having count(*)>1
select *
from view_1
where name in (select name from view_1 group by name
having count(*)>1 )

Problemet är att duplikationerna kommer efter första queryn. Säg att jag söker på bilar som har 2 efterfrågade konfigurationer. Exempel vis id 88 och id 87. då förekommer ju bilens namn två gånger om den har det. En bil förekommer bara 1 gång om det har en av de efterfrågade idn. Det vill inte jag ha med.

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av aniik:

@Teknocide:
Menar du något så här?

Select Name,ECU, Identifier, Value, Max(Filetime) as "latestfile", count(*) as numname from dbo.view_1
group by Name, ECU, Identifier, Value
Having ECU IN (Select Item from [dbo].[SplitString]('EBS7',',')) and Identifier IN (SELECT Item FROM [dbo].[SplitString]( '88,87', ',' ) ) and Value IN (Select Item FROM [dbo].[SplitString]('2459579,2431629',','))

ORDER BY
MAX(Name) ASC;
select name from view_1
group by name
having count(*)>1
select *
from view_1
where name in (select name from view_1 group by name
having count(*)>1 )

Problemet är att duplikationerna kommer efter första queryn. Säg att jag söker på bilar som har 2 efterfrågade konfigurationer. Exempel vis id 88 och id 87. då förekommer ju bilens namn två gånger om den har det. En bil förekommer bara 1 gång om det har en av de efterfrågade idn. Det vill inte jag ha med.

Nja, jag skrev ju att du gjorde för många grupperingar och behövde tänka om queryn. Om jag nu förstår dig rätt har du därtill en annan query som du inte visat tidigare? Kanske är lättare att börja från början: hur ser dina tabeller ut och vad är det egentligen du försöker göra?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Apr 2006

Läs på om hur group by fungerar så fixar du det med hjälpen du fått här via group by och having.
Enkelt uttrykt, allt du grupperar på slås samman om så är möjligt. Så grupperar du på Id och Namn tex och Id är olika men namn lika så blir det 2 rader, grupperar du bara på namn så får du 1 rad.

INTEL CORE I7 3930K 3.20GHZ 12MB S-2011, FRACTAL DESIGN MIDITOWER DEFINE R3, CORSAIR HX 1050W, ASUS RAMPAGE IV FORMULA, Asus STRIX GTX970, CORSAIR 16GB DDR3 DOMINATOR QUAD 1866MHZ CL9 (4X4GB) Ljud: ASUS Xonar D2X/XDT 7.1 | Elac 5.1 +förstärkare | Cambridge dacmagic plus | Astro gaming A40 | Sennheiser HD 650
You ask me if I have a god complex? Let me tell you something, I am god!