하여 폴더에 이름 목록 :파티션과 같은 데이터의 집합을 감안할 때 초기 편지
id Name
1 Aaa
2 Aab
3 AAc
…
999 Zzz
을, 나는 첫 글자하여 파티션을 가상 폴더를 만들고 싶습니다. 예를 들어, 내가, 예를 들어, 함수에 7
를 통과하고 7 개 폴더를 좀하고 싶습니다 :
- AC
- DF
- GH
- IM
- NQ
- RS를
- TZ
... 어느 eac h는 각각의 값을 포함한다. T-Z
은 Zzz
을 포함합니다).
WITH Ntiles(Name, Ntile) AS (
SELECT Name, NTILE(7) OVER(ORDER BY Name) FROM #Projects
) SELECT P.Name, (
SELECT MIN(LEFT(N1.Name, 1)) + '-' + MAX(LEFT(N1.Name, 1)) FROM Ntiles N1
WHERE N1.Ntile = N2.Ntile
GROUP BY N1.Ntile
) FROM #Projects P INNER JOIN Ntiles N2 ON P.Name = N2.Name
을 ...하는 것 같다 :
WITH Ntiles(Name, Ntile) AS (
SELECT Name, NTILE(7) OVER(ORDER BY Name) FROM #Projects
)
SELECT MIN(LEFT(N.Name, 1)) + '-' + MAX(LEFT(N.Name, 1))
FROM Ntiles N
GROUP BY Ntile
내가 다른 두 개의 조인하고있어, 원하는 값을 추가하려면 : 내가 원하는 결과에 사실을 얻을 수 NTILE()
를 사용할 수 있음을 알아 냈어요 조금 비효율적이다.
그러나 또한 잘못되었습니다. 중복이 있습니다 (예 : P
은 J-P
및 P-T
에 모두 표시됨).
올바른 경로에 있습니까? 더 효율적인 방법이 있습니까? 중복을 방지하려면 어떻게해야합니까? 당신은 단순히 상당히 동일한 그룹으로 초기 편지 목록을 분할해야하는 경우
음, *는 * 원본 데이터를 기반으로 가중치를해야 편지 그룹이, 문자를 기반으로하지. –
내 의견으로는, 당신이 내 대답 *의 수락을 취소하고 당신의 마지막 질문을 귀하의 질문에 추가한다면 공정 할 것입니다. 나는 당신에게 맞는 해결책을 찾으려고 노력할 것입니다. 아니면 다른 누군가가 저보다 빨리 그것을 할 수있을 것입니다. 대안으로, 당신이 새로운 질문을 할 수도 있습니다. –