programing

단순성 유지 및 쿼리에서 여러 CTE를 수행하는 방법

mailnote 2023. 4. 16. 15:29
반응형

단순성 유지 및 쿼리에서 여러 CTE를 수행하는 방법

이 간단한 T-SQL 쿼리는 테이블에서 여러 열을 내보내고 다른 관련 테이블의 정보를 결합합니다.

데이터 모델은 단순합니다.참석자들과 함께 예정된 행사가 있습니다.각 이벤트에 얼마나 많은 참가자가 참여하는지 알아야 합니다.

이 문제를 해결하려면 일정된 이벤트를 그룹화하고 참가자 수를 카운트하는 CTE를 추가합니다.

그러면 일정된 이벤트별로 해당 정보에 참여할 수 있습니다.쿼리를 단순하게 유지합니다.

질의는 단순하게 하고 싶은데, 나중에 간단한 질의 중에 임시 결과에 액세스할 수 있도록 해야 할 경우 어떻게 해야 합니까?

CTE를 여러 개 할 수 있으면 좋겠지만 할 수 없는 거죠?여기서 내가 선택할 수 있는 게 뭐야?

애플리케이션 데이터 계층에서 보기 및 작업을 수행할 수 없습니다.SQL 쿼리를 격리하는 것을 선호합니다.

여러 개를 가질 수 있습니다.CTE1개의 쿼리에서 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

반응형