2012-10-17 3 views
2

는 다음 설치 감안할 때 :SQL 서버 행을 기반으로 그룹

DECLARE @TemplateInfo table (Name varchar(10), aRow int, aCol int, Value int) 

insert INTO @TemplateInfo (Name, aRow, aCol, Value) 
VALUES ('A', 0,0,1),('B', 0,0,2),('A',1,0,2),('B',1,0,1),('C',0,0,1),('C',1,0,1) 

어떻게 내가 가지고있는 고유 한 이름의 이름 값을 선택할 수 있습니다 (aRow = 0, ACOL = 0, 값 = 1)과 (aRow = 1, aCol = 0, Value = 1).

나는이 같은 쿼리 시도 :

select Name 
from @TemplateInfo info 
where (info.aRow = 0 and info.aCol = 0 AND Value = 1) 
     or (info.aRow = 1 and info.aCol = 0 AND Value = 1) 
GROUP BY Name 

을하지만 그 A는, B와 C가 확실 행에 걸쳐 일치 (만 C를 반환)

답변

2

당신이었다가 확인하십시오 어떻게 반환 정말 가까이에.

select Name 
from @TemplateInfo info 
where (info.aRow = 0 and info.aCol = 0 AND Value = 1) 
     or (info.aRow = 1 and info.aCol = 0 AND Value = 1) 
group by Name 
HAVING COUNT(*) = 2 

을이 유효하지만 각 name에 대한 aRow, aCol, Value의 한 조합이있을 수있는 경우에만 : 당신이 갖고 싶어하기 때문에 두 조건이 모두 요 HAVING을 사용할 수 평가했다.

+0

+1, 여기 당신의 접근 방식의 SQL 바이올린 ... 나는 비슷한 작업을하고 있어요하지만 당신은 너무 날 이길 it :) http://www.sqlfiddle.com/#!3/4d781/3 – RThomas

+0

@RThomas - SQL 바이올린을 가져 주셔서 감사합니다. – Lamak

1

당신은 사용할 수 있습니다 교차

Select name From @TemplateInfo where aRow=0 and aCol=0 and Value=1 
intersect 
Select name From @TemplateInfo where aRow=1 and aCol=0 and Value=1 

결과

name 
C