Endast visa duplikationer Microsoft SQL server

Permalänk
Medlem

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!

Permalänk
Medlem

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

Permalänk
Medlem

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

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

Visa signatur

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

Permalänk
Medlem

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

Permalänk
Medlem
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 )

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

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

Permalänk
Medlem
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?

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

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.

Visa signatur

Intel Core i7 8700K, MSI GeForce GTX 1080 Ti 11GB Gaming X, Samsung 960 EVO 1TB, MSI Z370 GAMING M5, Corsair 32GB (4x8GB) DDR4 3200MHz CL16 Vengeance, EVGA Supernova G3 850W

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!