SQL 2005 메모 공용 표 표현 식 학습(CTE)
with test_CTE(id,salary)
as
(
select id ,max(salary)
from test
group by id
)
select * from test_cte
상기 예제 에서 알 수 있 듯 이 CTE 는 CTE 를 나타 내 는 표현 식 이름,선택 가능 한 목록 과 CET 를 정의 하 는 조회 로 구성 된다.CTE 를 정의 하면 SELECT,INSERT,UPDATE 또는 DELETE 문구 에서 인용 표 나 보기 처럼 인용 할 수 있 습 니 다.쉽게 말 하면 CTE 는 임시 표 와 표 변수의 기능 을 대체 할 수 있다.저 는 개인 적 으로 cte 가 가장 좋 은 곳 은 재 귀 조 회 를 만 드 는 것 이 라 고 생각 합 니 다.다음은 이 기능 을 보 여 드 리 겠 습 니 다.기 존의 데이터 구 조 는 다음 과 같 습 니 다.이 데 이 터 는 표 Co 에 저 장 됩 니 다.ItemNameset 에서 표 구조 와 일부 데 이 터 는 다음 과 같다.ItemId Parent ItemId ItemName 2 0 관리 비용 30 판매 비용 40 재무 비용 50 생산 원가 35 5 재료 36 5 인공 37 5 제조 비용 38 35 원자재 39 35 주요 재료 40 35 간 부재료 41 36 급여 42 36 복지 43 36 년 보너스 현재 수 요 는:ItemId=2 를 조회 하고 싶 습 니 다.즉,관리 비용 과 그 부하 모든 노드 의 정 보 는 CTE 를 통 해 필요 한 데 이 터 를 간단하게 달성 할 수 있 습 니 다.CTE 의 편의 성 을 나타 내기 위해 저 는 sql 2000 버 전의 해결 방법 도 썼 습 니 다.먼저 sql 2000 이 이 문 제 를 어떻게 해결 하 는 지 살 펴 보 자
--sql2000
DECLARE @i INT
SELECT @i=2;
/*
( )。
, 。
, 。
*/
CREATE TABLE #tem(
[ItemId] [INT] NOT NULL,
[level] INT
);
/*
*/
CREATE TABLE #list(
[ItemId] [INT] NOT NULL,
[ParentItemId] [INT] NOT NULL DEFAULT ((0)),
[ItemName] [nvarchar](100) NOT NULL DEFAULT (''),
[level] INT
);
INSERT INTO #tem([ItemId],[level])
SELECT ItemId, 1
FROM Co_ItemNameSet
WHERE itemid=@i
INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])
SELECT ItemId, ParentItemId, ItemName ,1
FROM Co_ItemNameSet
WHERE itemid=@i
DECLARE @level INT
SELECT @level=1
DECLARE @current INT
SELECT @current=0
/*
@level 0 , :
1. (@level) , , @current。
2. , (@level + 1) 。
3. (IF @@ROWCOUNT > 0), (@level = @level + 1); , 。
4. , , , (@level = @level - 1)。 , 。
*/
WHILE(@level>0)
BEGIN
SELECT @current=ItemId
FROM #tem
WHERE [level]=@level
IF @@ROWCOUNT>0
BEGIN
--
DELETE FROM #tem
WHERE [level]=@level and ItemId=@current
-- (@level + 1) 。
INSERT INTO #tem([ItemId],[level])
SELECT [ItemId],@level+1
FROM Co_ItemNameSet
WHERE ParentItemId=@current
--
INSERT INTO #list([ItemId],[ParentItemId],[ItemName],[level])
SELECT [ItemId],[ParentItemId],[ItemName] ,@level+1
FROM Co_ItemNameSet
WHERE ParentItemId=@current
IF @@rowcount>0
BEGIN
SELECT @level=@level+1
END
END
ELSE
BEGIN
SELECT @level=@level-1
END
END
--
SELECT * FROM #list
DROP TABLE #tem
DROP TABLE #list
go
결 과 는 다음 과 같다.sql 2005 에서 CTE 의 재 귀 특징 을 통 해 2 단계 로 실현 할 수 있 습 니 다.같은 결 과 를 얻 었 습 니 다.sql 2005 의 CTE 코드 는 훨씬 간단 합 니 다.이것 이 바로 CTE 가 재 귀 조 회 를 지원 하 는 매력 입 니 다.아래 코드 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQL 2005 메모 공용 표 표현 식 학습(CTE)공용 표 표현 식(CTE)은 하나의 SELECT,INSERT,UPDATE,DELETE 또는 CREATE VIEW 문장의 실행 범위 내 에서 정 의 된 임시 결과 집합 이 라 고 볼 수 있다.CTE 는 파생 표 와 유...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.