첫 번째 열이 키이고 두 번째 열이 다른 유형의 요소를 포함하는 테이블 (표 1)이 있습니다. 표 1에는 세 가지 유형 (유형 A, B, C)이 있지만 실제 데이터베이스에는 더 많은 유형이 있습니다.
Table.1. A minimal example.
_________________
| | |
|_KEY| attribute |
|____|___________|
|k1 | A |
|k2 | A |
|k3 | B |
|k4 | C |
|k5 | C |
|____|___________|
표 1에서; 각 유형에서 제한된 양의 요소 만 검색하는 데 관심이 있습니다. 주어진 유형의 제한된 양의 요소는 표 2에 의해 제공되며, 여기서 요소 유형은 테이블 (_element)의 키입니다.
명확히하기 위해; 이 최소 예에서 표 1에서 얻을 수있는 A 유형 요소의 제한된 양은 1입니다. 마찬가지로 유형 B의 경우 2이고 유형 C의 경우 1입니다.
Table 2. Limits of item to obtain for each type in table 1.
____________________
| _Element | Limit |
|----------|-------|
| A | 1 |
| B | 2 |
| C | 1 |
|__________|_______|
마지막으로, 요소는 위에서 아래로 표 1에서 검색되어야합니다.
도움 및 / 또는 포인터 / 거스에 감사드립니다.
추신
위의 최소 예에서 예상되는 출력은 다음과 같습니다.
___________________
| Key| Attribute |
|____|____________|
| k1 | A |
| k3 | B |
| K4 | C |
|____|____________|
이 특정 최소 예제에 대해 하나의 C 속성 만 존재하기 때문에. C 유형의 요소 5 개가 존재한다면 다음 표가 대신 얻어 졌을 것입니다 (C 요소의 제한된 양이 2이므로).
___________________
| Key| Attribute |
|____|____________|
| k1 | A |
| k3 | B |
| K4 | C |
|_k5 | C |
|____|____________|
항상 노조로 할 수 있습니다.
select top (SELECT Limit FROM Table2 WHERE _Element='A') * from Table1
WHERE attribute = A
UNION ALL
select top (SELECT Limit FROM Table2 WHERE _Element='B') * from Table1
WHERE attribute = B
UNION ALL
select top (SELECT Limit FROM Table2 WHERE _Element='C') * from Table1
WHERE attribute = C
또는 row_number 사용 :
with cte as (SELECT _Key,
attribute,
ROW_NUMBER() OVER (Partition by attribute Order by _Key ASC) as rowno
From Table1)
SELECT * FROM cte
LEFT JOIN Table2 on Table2.Element = Table1.attribute
WHERE rowno >= Limit
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다