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 5901 게시물 읽기
No. 5901
update 쿼리시
작성자
박인기(khroaitt)
작성일
2011-06-07 11:58ⓒ
2011-06-07 13:18ⓜ
조회수
8,060

create table 전체월(
고객코드 varchar(255),
월1 varchar(50),
월2 varchar(50),
월3 varchar(50),
월4 varchar(50),
월5 varchar(50),
월6 varchar(50),
월7 varchar(50),
월8 varchar(50),
월9 varchar(50),
월10 varchar(50),
월11 varchar(50),
월12 varchar(50)
)

create table 월1 (
고객코드 varchar(255),
월1 varchar(50)
)

create table 월2 (
고객코드 varchar(255),
월2 varchar(50)
)

create table 월3 (
고객코드 varchar(255),
월3 varchar(50)
)

.........

create table 월12 (
고객코드 varchar(255),
월12 varchar(50)
)

이렇게 테이블을 만들고

전체월 테이블에는 우선 distinct옵션을 줘서 고객코드를 정렬시켜 집어 넣었습니다.

그리고  각 월별 테이블에는 중복제거를 하지 않고, 고객코드와 이에 해당하는 count수가 들어갑니다.

 

그래서 단순히 전체월 테이블과 해당 월 테이블을 조인 시켜서

고객 코드별_월별_갯수 를 만들어 내려고 하는데 문제가 생긴 부분이

여러 행에서 가져 온 값을 여러행에 집어넣으려니 잘 되질 않습니다.

그래서 궁금한 것이

1.여러행에서 가져온 값을 여러행으로 업데이트 시키려면 IN연산자를 쓰면 안되는 것인가요?

2.인서트를 시키려니 행 아랫쪽 긑에 추가가 되는데 이를 해당 코드에 해당하는 곳에 넣으려면 어떻게 해야하는건가요?

 

아래는 해당 쿼리와 오류입니다.

update A
set 월1 = (select COUNT(B.CUST_TYPE)
   from B inner join C
   on B.고객코드= C.[열 1]   
   where SUBSTRING(기간, 1, 6) = '201005'
   and B.SANG_ID = C.[열 4] 
   and B.신규_갱신구분 = '신규'
   group by B.CUST_TYPE)
where 고객코드 IN (select B.CUST_TYPE
     from B inner join C
     on B.고객코드 = C.[열 1] 
     where SUBSTRING(B.기간, 1, 6) = '201005'
     and B.SANG_ID = C.[열 4] 
     and B.신규_갱신구분 = '신규'
     group by B.CUST_TYPE)
 

 메시지 512, 수준 16, 상태 1, 줄 1
하위 쿼리에서 값을 둘 이상 반환했습니다. 하위 쿼리 앞에 =, !=, <, <=, >, >= 등이 오거나 하위 쿼리가 하나의 식으로 사용된 경우에는 여러 값을 반환할 수 없습니다.
문이 종료되었습니다.

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

select COUNT(B.CUST_TYPE)
            from B inner join C on B.고객코드= C.[열 1]  
            where SUBSTRING(기간, 1, 6) = '201005'
              and B.SANG_ID = C.[열 4]
              and B.신규_갱신구분 = '신규'

                       group by B.CUST_TYPE

 

set 구문을 스칼라 서브쿼리를 이용하셨는데..

이때 본 쿼리의 조건에서는 B.CUST_TYPE 을 걸어 주셨지만 set 절에는 그룹 만 잡아주셔서 전체 B.CUST_TYPE의 카운트가 나오게 되어있습니다.

업데이트문 같은 경우 mssql에서는 from절이 지원이 되기때문에 조인관계를 이용하시는게 성능이 확연히 좋습니다.. 스칼라 서브 쿼리는 자료의 건수가 적을때나 성능보다는 먼저 업무 진행을 위해 임시 방편으로 이용하시는게 좋습니다.

 

지나가다가님이 2011-06-09 09:51에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
5904전체 텍스트 인덱스 활성화 시키려면?
문승원
2011-06-15
6434
5903한 컬럼의 값에 따라 다른컬럼을 ceiling 하려 합니다. [1]
박정원
2011-06-14
6174
5902살려주세요~ [1]
신입초짜
2011-06-07
7167
5901update 쿼리시 [1]
박인기
2011-06-07
8060
5899트리형으로 나타내고 싶어요 [2]
픽스드기어
2011-05-30
6583
5898ms-sql primary key 컬럼 에 대한 중복 entity 관련 질문.
신희창
2011-05-27
7695
5897년월 목록을 가지고 오고 싶어요.. [1]
김현지
2011-05-27
7312
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다