EDIT : 끝 부분에 샘플 I/O가 있습니다.그룹화 된 서브 세트에 존재하거나 존재하지 않는 SELECT를 사용하여 존재 여부를 테스트하십시오.
특정 조건이 있거나 다른 조건이없는 경우 +1을 계산해야하는 데이터가 있습니다. 나는 임시 테이블에 다음과 같은 단순화 된 샘플 XML을 분쇄기과 유효성을 확인 SQL 서버 2008
을 사용하고 있습니다 :
<product type="1">
<param type="1">
<item mode="0" weight="1" />
</param>
<param type="2">
<item mode="1" weight="1" />
<item mode="0" weight="0.1" />
</param>
<param type="3">
<item mode="1" weight="0.75" />
<item mode="1" weight="0.25" />
</param>
</product>
우려의 검증은 다음과 같은 규칙입니다 :
들어 각 제품 유형은 각 매개 변수 유형에 대해 모드는 0 & (1 || 2) 일 수 있습니다. 다른 단어에는 0 (s)가있을 수 있지만 은 1 또는 2가 필요하고 은 1 또는 2 일 수 있습니다. 은 0이 아니며 1은 및 2가 될 수 없습니다.
내가 알아 내지 못했던 부분은 0 만 있는지 감지하는 방법입니다. 이것은 "문제가 없다"는 것처럼 보입니다.
(이 부분에 대한) 검증 코드 : 어떤 모드 1 초는 & 2 초를 혼합하는 경우
WITH t1 AS (
SELECT SUM(t.ParamWeight) AS S, COUNT(1) AS C,
t.ProductTypeID, t.ParamTypeID, t.Mode
FROM @t AS t
GROUP BY t.ProductTypeID, t.ParamTypeID, t.Mode
),
...
UNION ALL
SELECT TOP (1) 1 -- only mode 0 & (1 || 2) is allowed
FROM t1
WHERE t1.Mode IN (1, 2)
GROUP BY t1.ProductTypeID, t1.ParamTypeID
HAVING COUNT(1) > 1
UNION ALL
...
)
SELECT @C = COUNT(1)
FROM t2
이가 표시되지만 그룹 만 나는 간단한이 있는지 해요 0이 포함되지 않은 경우 솔루션,하지만 지금은 나를 피하고있어.
편집 : 나는 완벽하게 작동하는 "속임수"생각
.
SELECT TOP (1) 1 -- only mode 0 & (null || 1 || 2) is allowed
FROM t1
GROUP BY t1.ProductTypeID, t1.ParamTypeID
HAVING SUM(t1.Mode) = 0
그러나, 나는 여전히 부정하지 않고이 작업을 수행하는 방법을 알고 싶습니다 : 나는 위의에 다음을 추가했다. 난 당신이 다음 단지를 쿼리에 응답하는이 3 열을 사용 할 수 있다고 생각
SELECT ProductTypeID,ParamTypeID,MIN(Mode) as Has0,MAX(Mode) as M1or2,MAX(CASE WHEN Mode=1 THEN 1 ELSE 0 END) as M1
from @t
group by ProductTypeID,ParamTypeID
:
SAMPLE은
Zero One Two Result
1 0 0 False
0 1 1 False
1 1 1 False
0 1 0 True
0 0 1 True
1 1 0 True
1 0 1 True
감사합니다 데미안. 만약 당신의 SQL을 올바르게 읽고 있다면, 그것은 저 모드가 1이면 Has0이 1이 될 수있는 것처럼 보입니다. 예 ... 테스트했습니다.내가 제안한대로 샘플을 게시 할 것입니다. – IamIC
@IanC - 샘플 "거짓"행에 대해 0을 반환하는 열과 그렇지 않으면 1 인 열을 갖는 새 쿼리를 추가했습니다. 그게 충분한가요? –
화려한! 정말 고마워!! – IamIC