2010-03-02 25 views
5

Mam zestaw danych z dwiema kolumnami w następujący sposób;Znajdowanie wartości wspólnych dla wszystkich elementów

Prod Value 
A 1 
A 2 
A 3 
B 2 
B 4 
C 1 
C 2 

Więc chcę wszystkich wierszy, gdzie wartość jest wspólne dla Prod, więc w powyższym przykładzie tylko następujące zostaną zwrócone.

A 2 
B 2 
C 2 

Albo LINQ lub SQL byłoby pomocne

Dzięki

Odpowiedz

1
-- DROP TABLE #t2 UNCOMMENT WHEN TESTING... 

CREATE TABLE #t2 
(
Prod varchar(50), 
Value int 
) 

INSERT INTO #t2 VALUES ('A', 1) 
INSERT INTO #t2 VALUES ('A', 2) 
INSERT INTO #t2 VALUES ('B', 2) 
INSERT INTO #t2 VALUES ('B', 4) 
INSERT INTO #t2 VALUES ('C', 2) 

SELECT 
    DISTINCT 
    p1.Prod, 
    p2.Value 
FROM 
    #t2 p1 
INNER JOIN 
    #t2 p2 
ON 
    p2.Value = p1.Value AND p1.Prod <> p2.Prod 

Jest to rozwiązanie oparte SQL Server :) a.

1

Możesz użyć operatora Przecięcie w drugiej kolumnie zestawu danych.

int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 }; 
int[] numbersB = { 1, 3, 5, 7, 8 }; 
var commonNumbers = numbersA.Intersect(numbersB); 

Linq Samples

+0

Docenić odpowiedź, jesteś sugerując, grupowanie i korzystania przez Prod przecinają znaleźć wartości pasujące? – Dub

1

Oto co wymyśliłem, to myślę, że jest łatwiejszy sposób, ale;

 var prodList = (from col in list select col["Prod"]).Distinct().ToList(); 


     var valueList = from col in list 
         group col by col["Value"] into g 
         where g.Count() == prodList.Count() 
         select g.Key; 

Które mi podać wszystkie wartości szukam

Powiązane problemy