2011-09-12 5 views
1

저는 SQL로 좋지 않습니다. 지난 월요일에 우리는 어제 밤에 내가 생각할 수없는 파티를 가졌습니다. 당신 도움이 필요합니다.테이블의 '계층 적'데이터에서 결합 된 결과 가져 오기

SQL 테이블에 데이터가있는 경우. 그런 일 :

ModelName Color Garageld 

BMW   Black NULL 
Mercedes  Red  NULL 
Audi   Yellow NULL 
BMW   Green 1 
Mercedes  Blue 1 

그리고 나는 그것이 기록을 결합해야하는 위치 아이디 == 1 차고에 대한 모든 기록을 얻을 필요가 현재 사용 LINQtoEntities - 차고 및 자동차에 대해 정의 된 색상이있는 경우 - 도착 (

내가 외부를 사용하여이 작업을 수행 할 것
Audi   Yellow 
BMW   Green 
Mercedes  Blue 
+1

예를 들어, Audi가 목록에 포함 된 이유는 (GarageID가 null 인 경우) – Sparky

+3

@ Sparky 그 사람이 파티에 열쇠를 준 사람에게 돌려 주어야하기 때문입니다. –

+0

기본 방식의 자동차 모델이 있습니다. 모든 차고의 색상, 차고의 색상을 구체적으로 정의합니다. 전체 목록을 가져와야합니다. 차고 # 1의 모든 색상과 누락 된 것이 있지만 기본값으로 정의되어 있습니다. – Agzam

답변

1

기본에서 조인 존재하지 않는 경우는, 그래서 garageId == 1에 설정 한 결과가 있어야한다 NULL

위한 어떤 색이 걸릴 null) 차고 엔트리를 차고에 1 개 입력하십시오. 첫 번째 널 (null)이 아닌 인수를 리턴하는 표준 SQL 함수 인 COALESCE()를 사용하십시오.

SELECT dflt.ModelName, COALESCE(g.Color, dflt.Color) AS Color 
FROM mytable AS dflt 
LEFT OUTER JOIN mytable AS g 
    ON dflt.ModelName = g.ModelName AND g.GarageId = 1 
WHERE dflt.GarageId IS NULL 

이 주어진 모델을 찾을 수 없습니다 차고 1 항목이 없으며, 외부 조인 g.* 그래서 COALESCE (null을 모든 열) g.Color를 생략하고 대신 dflt.Color를 사용한다.

+0

감사하지만 LINQ는 어떻습니까? – Agzam

+0

죄송합니다. LINQ 사용에 대해서는 아무 것도 모릅니다. –

관련 문제