계산과 관련하여 찾을 수있는 모든 CTE 예제에는 관리자가 수행하는 고전적인 '얼마나 많은 직접 보고서'가 포함됩니다. 나는 미묘한 생각을 가지고있다. Essenitally 계층 구조의 각 노드에 대해 TOTAL의 다른 노드가 ALL 수준 아래에 있는지 확인하고 싶습니다. 그래서 회사에 12 명이 있었다면 맨 위의 갈라진 금은 그 아래에 11이 있습니다. 그는 3 개의 직접 보고서를 가질 수 있습니다. 첫 번째 보고서는 2, 두 번째는 4 번째, 세 번째는 등입니다. 그냥 할 수 있습니다. 노드 밑에있는 모든 것의 합을 구하는 방법을 알아 내려고합니다. 도와주세요!T-SQL CTE 수 ALL 노드 아래에 남음
1
A
답변
1
CTE 여야하는 경우 AdventureWorks 데이터베이스를 기반으로 쿼리해야합니다. 채우기 선택 CTE는 주어진 EmployeeID 위의 모든 관리자 목록을 반복적으로 작성합니다. 최종 선택은 AllManagers 열에서 주어진 EmployeeID의 모든 발생을 계산합니다.
WITH EmployeeList (EmployeeID, ManagerID, Level, AllManagers) AS
(
SELECT
EmployeeID,
ManagerID,
0 AS Level,
CAST(',' + CAST(EmployeeID AS varchar) + ',' AS varchar) AS AllManagers
FROM HumanResources.Employee
WHERE ManagerID IS NULL
UNION ALL
SELECT
HumanResources.Employee.EmployeeID,
HumanResources.Employee.ManagerID,
EmployeeList.level + 1 AS level,
CAST(AllManagers + CAST(HumanResources.Employee.EmployeeID AS varchar) + ',' AS varchar) AS AllManagers
FROM HumanResources.Employee inner join EmployeeList ON HumanResources.Employee.ManagerID = EmployeeList.employeeID
)
SELECT
EmployeeID,
ManagerID,
Level,
AllManagers,
--have to subtract 1 because AllManagers path includes employee own ID
(SELECT COUNT(*) FROM EmployeeList T1 WHERE T1.allmanagers LIKE '%,' + CAST(EmployeeList.employeeid AS varchar) + ',%') - 1 AS Subordinates
FROM EmployeeList
ORDER BY Level
0
자체 참조 외래 키 열이있는 테이블로 트리 구조가 있고 트리의 각 노드의 하위 노드 수를 계산하려고합니다. 이 기사를 읽으면 문제에 대한 해답을 얻을 수 있습니다. http://www.sqlmag.com/article/tsql3/calculate-the-sum-of-salaries-in-an-employee-tree- 특히 "재귀 적 CTE 기반 솔루션"단락을 참조하십시오. 영리한 부분은 "수준"열을 만들지 않고도 결과를 얻을 수 있다는 것입니다 (필요하지 않은 경우).
관련 문제
- 1. 는 CTE
- 2. CTE With Oracle에서 삽입
- 3. CTE 사용의 장단점은 무엇입니까?
- 4. Messagequeue가 제거 된 후에 남음
- 5. CTE Join query issues
- 6. CTE - 역 계층
- 7. 청크에서 선택할 CTE?
- 8. 클릭 후 CSS 스타일이 남음
- 9. 는 --all
- 10. 보기의 메뉴 항목 아래에 표시 할 노드 가져 오기
- 11. SQL Server 2005의 CTE 평가
- 12. caches_page : all
- 13. SQL 다중 조건 CTE 재귀
- 14. 특정 노드 아래 xml 노드 수
- 15. TGUITestRunner의 "Collapse All"노드는 어떻게 사용할 수 있습니까?
- 16. TSQL : With 문의 With 문 내
- 17. TSQL 문안에서
- 18. SQL CTE 차일즈 카운팅을 계산
- 19. NHibernate에 multicriteria CTE 하위 쿼리
- 20. T-SQL 재귀 쿼리 (CTE)
- 21. 대체 TSQL
- 22. XPath : 다른 노드 값을 기반으로 노드 선택
- 23. SQL CTE 재귀 : 상위 레코드 반환
- 24. linq-to-sql의 공통 테이블 식 (CTE)?
- 25. MS TSQL
- 26. TSQL 값
- 27. 는 TSQL
- 28. TSQL 번역
- 29. 테두리가 서로 3 개의 셀로 남음
- 30. Linux에서 C++ 코드로 파일 핸들이 남음
데이터 구조에 대해 알려주십시오. Common Table Expressions에 대해 언급했지만 테이블 구조에 따라 필요하지 않을 수도 있습니다. –
직원 테이블 – Paul
employee id, reports_to_employee-id, name ..... Report_to_employee_id fk가 employee 테이블에 있으므로 gerneric 계층 구조가 한 테이블에 표시됩니다. – Paul