단순성 유지 및 쿼리에서 여러 CTE를 수행하는 방법
이 간단한 T-SQL 쿼리는 테이블에서 여러 열을 내보내고 다른 관련 테이블의 정보를 결합합니다.
데이터 모델은 단순합니다.참석자들과 함께 예정된 행사가 있습니다.각 이벤트에 얼마나 많은 참가자가 참여하는지 알아야 합니다.
이 문제를 해결하려면 일정된 이벤트를 그룹화하고 참가자 수를 카운트하는 CTE를 추가합니다.
그러면 일정된 이벤트별로 해당 정보에 참여할 수 있습니다.쿼리를 단순하게 유지합니다.
질의는 단순하게 하고 싶은데, 나중에 간단한 질의 중에 임시 결과에 액세스할 수 있도록 해야 할 경우 어떻게 해야 합니까?
CTE를 여러 개 할 수 있으면 좋겠지만 할 수 없는 거죠?여기서 내가 선택할 수 있는 게 뭐야?
애플리케이션 데이터 계층에서 보기 및 작업을 수행할 수 없습니다.SQL 쿼리를 격리하는 것을 선호합니다.
여러 개를 가질 수 있습니다.CTE
1개의 쿼리에서 s를 사용하여CTE
:
WITH cte1 AS
(
SELECT 1 AS id
),
cte2 AS
(
SELECT 2 AS id
)
SELECT *
FROM cte1
UNION ALL
SELECT *
FROM cte2
UNION ALL
SELECT *
FROM cte1
다만, 주의해 주세요.SQL Server
재평가할 가능성이 있다CTE
액세스 할 때마다, 다음과 같은 값을 사용하는 경우RAND()
,NEWID()
등, 이러한 변경은,CTE
콜을 클릭합니다.
1개의 쿼리 식에 여러 CTE를 포함할 수 있습니다.쉼표로 구분하면 됩니다.여기 예가 있습니다.다음 예에서는 2개의 CTE가 있습니다.한 명은CategoryAndNumberOfProducts
그리고 두 번째는ProductsOverTenDollars
.
WITH CategoryAndNumberOfProducts (CategoryID, CategoryName, NumberOfProducts) AS
(
SELECT
CategoryID,
CategoryName,
(SELECT COUNT(1) FROM Products p
WHERE p.CategoryID = c.CategoryID) as NumberOfProducts
FROM Categories c
),
ProductsOverTenDollars (ProductID, CategoryID, ProductName, UnitPrice) AS
(
SELECT
ProductID,
CategoryID,
ProductName,
UnitPrice
FROM Products p
WHERE UnitPrice > 10.0
)
SELECT c.CategoryName, c.NumberOfProducts,
p.ProductName, p.UnitPrice
FROM ProductsOverTenDollars p
INNER JOIN CategoryAndNumberOfProducts c ON
p.CategoryID = c.CategoryID
ORDER BY ProductName
언급URL : https://stackoverflow.com/questions/2140750/keeping-it-simple-and-how-to-do-multiple-cte-in-a-query
'programing' 카테고리의 다른 글
bash: 출력의 n번째 열을 얻는 가장 빠른 방법 (0) | 2023.04.16 |
---|---|
Spring Boot 3 springdoc-openapi-ui가 작동하지 않음 (0) | 2023.04.16 |
'프로젝트 이름'이 최적화로 컴파일되었습니다.스텝 동작이 이상할 수 있습니다.변수를 사용할 수 없습니다. (0) | 2023.04.16 |
값 '1'을 반환합니다. 참조된 셀이 비어 있습니다. (0) | 2023.04.16 |
Apache POI를 사용하여 특정 Excel 열을 읽는 방법 (0) | 2023.04.16 |