2016-05-23 4 views
0

Ich habe eine Tabelle in SQL Server mit Informationen über Produktinventar.So erhalten Sie Zeilen aus der gleichen Tabelle mit doppelten Werten in einem field_1 und eindeutigen Werten in field_2

zu vereinfachen, lassen Sie uns alle Felder in der Tabelle ignorieren, bis auf zwei, Product_Code und Farbe:

Product_Code | Colour 
------------------------ 
1   | Green 
1   | Red 
1   | Yellow 
1   | Green 
2   | Black 
3   | White 
3   | Green 

Ich möchte nur duplizierte Produkte mit verschiedenen Farben wählen, wie unten:

Product_Code | Colour 
------------------------- 
3   | White 
3   | Green 

Die Gründe zum Ignorieren von Product_Code # 1 und # 2 sind:

  1. Produc_Code # 1 hat doppelte Werte in Farben (Gr een); und
  2. Product_Code # 2 wird nicht im Datensatz dupliziert (nur eine Zeile).

Antwort

2

Versuchen Sie folgendes:

SELECT Product_Code, Colour 
FROM mytable 
WHERE Product_Code IN 
(
    SELECT Product_Code 
    FROM mytable 
    GROUP BY Product_Code 
    HAVING COUNT(*) > 1 AND 
      COUNT(*) = COUNT(DISTINCT Colour) 
) 
+0

Perfekte Antwort, danke Giorgos. –

0

Sie es in einer einzigen Abfrage gruppiert tun können, die having-Klausel mit singulären Paare auszufiltern.

select Product_Code, Colour 
from Products 
group by Product_Code, Colour 
having count(*) > 1 
+0

Dies ist eine gültige Antwort für ein anderes Szenario, z. B. das Abrufen von Zeilen, in denen sowohl Product_Code als auch Color doppelt vorhanden sind. –

Verwandte Themen