database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 4117 게시물 읽기
No. 4117
오라클의 with문법 mssql에서 어떻게 쓰는지 궁금합니다
작성자
라스트파스칼(dyingkei)
작성일
2008-03-17 11:07
조회수
4,601

안냐세여

먼저 글을 읽어 주셔서 감사합니다.

오라클에서
다음과 같이 쿼리문 앞부분에 
뷰를 정의하면 하단 문장 여러 곳에서 쓸 수 있습니다.
mssql에서는 어떤식으로 처리하는지 궁금합니다.

with view1 as
(select a.field1    ,
        a.field2
   from table1 a
   where cd = '1'


    //join
    //join
    //...

   left outer
   join table2 b
     on a.cd = b.cd
)


select mount
  from view1
--where...

union

select mount
  from view1
--where...

이 글에 대한 댓글이 총 2건 있습니다.

2000 버전은 잘 모르겠으나, 
2005부터는 SQL Server 에서도 비슷한 기능을 지원하는 것으로 알고 있습니다.
공통 테이블 식(CTE, common_table_expression) 이라고 하며, 
결과 집합을 임시 테이블처럼 네이밍하여 사용할 수 있습니다.

WITH DirectReports(ManagerID, EmployeeID, EmployeeLevel) AS
(
    SELECT ManagerID, EmployeeID, 0 AS EmployeeLevel
    FROM HumanResources.Employee
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.ManagerID, e.EmployeeID, EmployeeLevel + 1
    FROM HumanResources.Employee e
        INNER JOIN DirectReports d
        ON e.ManagerID = d.EmployeeID
)
SELECT ManagerID, EmployeeID, EmployeeLevel
FROM DirectReports
WHERE EmployeeLevel <= 2 ;

이런 식으로요...

도때리아님이 2008-03-18 20:34에 작성한 댓글입니다.
이 댓글은 2008-03-18 20:34에 마지막으로 수정되었습니다. Edit

2000에는 with로 table을 지정하는 형식은 없습니다. 

cte쿼리도 없구요

.님이 2008-03-19 19:37에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4120show error 시에요..^^;;
김희정
2008-03-17
3951
4119MSSQL과 Informix를 Select할 경우.. [1]
reused
2008-03-17
3618
4118insert 문에서요... [1]
kks
2008-03-17
3574
4117오라클의 with문법 mssql에서 어떻게 쓰는지 궁금합니다 [2]
라스트파스칼
2008-03-17
4601
4116Hash join의 조인 순서에 따라 속도차이가 있는지 궁금합니다. [2]
초보입니다.
2008-03-17
4004
4115LDF 관련 질문 있습니다.
Jeon
2008-03-14
3469
4114서버속도 문의 드립니다.
정명규
2008-03-14
3786
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다