나는 그것을 알아낼 수 없습니다. 두 개의 종속 매개 변수가 의미하는 것은 다음과 같습니다.
다음과 같은 레코드가 있다고 가정합니다.
ID Letter Number
-----------------------
23 A 1
23 A 2
23 B 1
23 B 2
81 A 1
81 B 2
사용자는 이것을 입력해야합니다 :
다음 모든 조건을 준수하는 유일한 ID 23이 반환됩니다.
A1, A2, B1, B2
몇 가지 쿼리를 시도 할 때마다 81이 반환되었습니다.
내 질문의 맥락에서 다음과 같은 4 가지 조건을 만드는 것이 충분히 빠를 것입니다.
A and 1, A and 2, B and 1, B and 2
그러나 내가 16 * 16 ...
그것들을 모두 작성하는 것은 매우 길 것입니다 ...
절 COUNT DISTINCT
에서 사용할 수 있습니다 HAVING
.
SELECT Id
FROM #Tbl
WHERE
Letter IN('A', 'B')
AND Number IN(1, 2)
GROUP BY Id
HAVING
COUNT(DISTINCT Letter) = 2
AND COUNT(DISTINCT Number) = 2;
보다 동적 인 접근 방식을 위해 테이블 변수에 기준을 넣을 수 있습니다.
DECLARE @Letters TABLE(Letter CHAR(1));
DECLARE @Numbers TABLE(Number INT);
INSERT INTO @Letters VALUES ('A'), ('B');
INSERT INTO @Numbers VALUES (1), (2);
WITH CteCross(Letter, Number) AS(
SELECT Letter, Number
FROM @Letters
CROSS JOIN @Numbers
)
SELECT t.Id
FROM #Tbl t
INNER JOIN CteCross cc
ON cc.Letter = t.Letter
AND cc.Number = t.Number
GROUP BY t.Id
HAVING COUNT(*) = (SELECT COUNT(*) FROM CteCross);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다