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 6911 게시물 읽기
No. 6911
안녕하세요 쿼리질문좀 드립니다.
작성자
투루로맨스(jung1873)
작성일
2015-05-18 13:58
조회수
6,408

안녕하세요

 

 

 

 

오라클쿼리에서 MS-SQL로 쿼리를 바꾸고 있는데

 

 

 

 

 

 

 

쿼리는

 

 

 

 

SELECT 'T' AS TYPE,

ISNULL (SUM (a.s1) + SUM (a.s2) + SUM (a.s3) + SUM (a.s4), 0) AS q1,

ISNULL (SUM (a.s1), 0) AS s1, ISNULL (SUM (a.s2), 0) AS s2,

ISNULL (SUM (a.s3), 0) AS s3, ISNULL (SUM (a.s4), 0) AS s4,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '001'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s5,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '002'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s6,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '003'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s7,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '004'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s8

FROM (SELECT a.qst_seq,

SUM (CASE

WHEN a.updt_type_code = '001'

THEN 1

ELSE 0

END) AS s1,

SUM (CASE

WHEN a.updt_type_code = '002'

THEN 1

ELSE 0

END) AS s2,

SUM (CASE

WHEN a.updt_type_code = '003'

THEN 1

ELSE 0

END) AS s3,

SUM (CASE

WHEN a.updt_type_code = '004'

THEN 1

ELSE 0

END) AS s4

FROM (SELECT a.qst_seq,

(SELECT TOP 1

updt_type_code

FROM tb_qst_updt

WHERE qst_seq = a.qst_seq

) AS updt_type_code

FROM tb_qst a

WHERE 1 = 1

AND qst_multi_yn = 'N'

AND qst_bank_yn = 'Y'

AND EXISTS (

SELECT 1

FROM tb_qst_updt

WHERE qst_seq = a.qst_seq

AND updt_type_code = a.updt_type_code

AND frst_register_id = 'k11')) a

GROUP BY a.qst_seq) a

UNION ALL

SELECT 'S' AS TYPE,

ISNULL (SUM (a.s1) + SUM (a.s2) + SUM (a.s3) + SUM (a.s4), 0) AS q1,

ISNULL (SUM (a.s1), 0) AS s1, ISNULL (SUM (a.s2), 0) AS s2,

ISNULL (SUM (a.s3), 0) AS s3, ISNULL (SUM (a.s4), 0) AS s4,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '001'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s5,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '002'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s6,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '003'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s7,

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '004'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s8

FROM (SELECT a.qst_seq,

SUM (CASE

WHEN a.updt_type_code = '001'

THEN 1

ELSE 0

END) AS s1,

SUM (CASE

WHEN a.updt_type_code = '002'

THEN 1

ELSE 0

END) AS s2,

SUM (CASE

WHEN a.updt_type_code = '003'

THEN 1

ELSE 0

END) AS s3,

SUM (CASE

WHEN a.updt_type_code = '004'

THEN 1

ELSE 0

END) AS s4

FROM (SELECT a.qst_seq,

(SELECT TOP 1

updt_type_code

FROM tb_qst_updt

WHERE qst_seq = a.qst_seq

) AS updt_type_code

FROM tb_qst a, tb_opertn b

WHERE 1 = 1

AND a.opertn_ser = b.opertn_ser

AND a.qst_multi_yn = 'N'

AND a.qst_bank_yn = 'Y'

AND EXISTS (

SELECT 1

FROM tb_qst_updt

WHERE qst_seq = a.qst_seq

AND updt_type_code = a.updt_type_code

AND frst_register_id = 'k11')

AND b.opertn_year = '2015'

AND a.opertn_ser = 4

AND a.class_code = 'KC') a

GROUP BY a.qst_seq) a

 

 

 

 

이런식으로 되어있습니다.

 

 

 

 

돌려보니 에러나는 부분은

메시지 130, 수준 15, 상태 1, 줄 10

집계 또는 하위 쿼리가 포함된 식에서는 집계 함수를 수행할 수 없습니다.

 

 

 

 

ISNULL (SUM ((SELECT COUNT (1)

FROM tb_qst_updt

WHERE updt_type_code = '001'

AND qst_seq = a.qst_seq

AND frst_register_id = 'k11')

),

0

) AS s5,

 

 

 

 

이부분에서 에러가 나더군요

 

오라클은 SUM 안에 count를 계산할수 있지만

 

MS-SQL 은 안되네여TT

 

 

 

 

어떤식으로 고쳐야 할지 한 수 부탁드립니다.

 

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

Isnull(Sum(select Count(1) from A),0)

 

근데 Count에서 이미 Sum 값이 나왔는데 또 Sum을 하는 이유가 뭐죠?

 

Isnull((select Count(1) from A),0)

 

Sum을 빼도 결과는 같을것 같은데...

오라클 옵티마이져가 맛이 갔나?

 

이승철(yamyo)님이 2015-05-19 16:29에 작성한 댓글입니다.
이 댓글은 2015-05-19 16:31에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
6914select 후 insert 질문입니다. [5]
꽃씨하나
2015-06-18
5995
6913SQL 초보자 입니다. [1]
혀니
2015-06-15
5921
6912조직도 하위 부서를 검색하는 쿼리 질문 (__) [3]
초보쿼리
2015-05-27
7322
6911안녕하세요 쿼리질문좀 드립니다. [1]
투루로맨스
2015-05-18
6408
6910조회쿼리 만들기. [2]
초보입니다.
2015-05-18
7733
6909업데이트 쿼리문 질문입니다. [4]
코우지
2015-05-12
5230
6908MS-SQL 날짜 관련 쿼리 질문 [2]
도와주세요
2015-05-11
6741
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다