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 4188 게시물 읽기
No. 4188
초보 쿼리좀 작성해 주세요. ^^
작성자
이만실
작성일
2008-04-23 14:42ⓒ
2008-04-23 14:44ⓜ
조회수
4,072

TableA 이라는 한개의 테이블에

========================================================
a_id   a_date       a_main    a_sub   a_total a_amt1  a_amt2
========================================================
1       20071120       A                         400    400           0
2       20071120       B            A           500    300        200   -->2개로 나눠짐
3       20071120       C                        100    100           0
4       20071120       C            D           300    200        100   -->2개로 나눠짐
=============================================

이라는 3개의 레코드가 있는데 이중에

a_amt2 필드의 값이 0인경우엔(a_sub가 자료가 없음) 레코드가 그대로 보여지고


0이 아니경우엔(a_sub에 특정 자료가 있음) 레코드들 하나 추가해서 WHERE a_main between 'A' AND 'Z' 하는식의 조건을 걸고 싶은데 몇일째 헤메고 있습니다.

아래와 같이 보여주는 방법은 없는지요 고수님들의 도움을 부탁 드립니다.


cross join을 사용하면 된다고 하는데... 제가 너무 초보라서요.

=====================================================================
a_id   a_date     a_main    a_sub    a_total   a_amt1   a_amt2  
=====================================================================
1       20071120      A                        400        400          0        a_amt2 가 0이므로 불변
---------------------------------------------------------------------
2       20071120      B                        300        300          0        두개로 분리 하여 합하면
2       20071120      A                        200           0       200       기존레코드 1개와 일치
---------------------------------------------------------------------
3       20071120      C                        100        100          0       a_amt2 가 0이므로 불변
---------------------------------------------------------------------
4       20071120      C                        200        200          0       두개로 분리 하여 합하면
4       20071120      D                        100           0       100       기존레코드 1개와 일치
=====================================================================

위 결과에서 a_main 필드로 조건을 걸고 싶습니다.

부탁 드립니다.

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

WITH TESTA AS
(
SELECT A_ID = 1, A_DATE = '20071120', A_MAIN = 'A', A_SUB = NULL , A_TOTAL = 400, A_AMT1 = '400' , A_AMT2 =    0   UNION ALL
SELECT A_ID = 2, A_DATE = '20071120', A_MAIN = 'B', A_SUB = 'A'  , A_TOTAL = 500, A_AMT1 = '300' , A_AMT2 =  200   UNION ALL
SELECT A_ID = 3, A_DATE = '20071120', A_MAIN = 'C', A_SUB = NULL , A_TOTAL = 100, A_AMT1 = '100' , A_AMT2 =    0   UNION ALL
SELECT A_ID = 4, A_DATE = '20071120', A_MAIN = 'C', A_SUB = 'D'  , A_TOTAL = 300, A_AMT1 = '200' , A_AMT2 =  100   
)
SELECT
 Q.*
FROM
(
SELECT
 A_ID     = A.A_ID
 , A_DATE = A.A_DATE
 , A_MAIN = CASE WHEN X =1 THEN A.A_MAIN
    ELSE A.A_SUB END
 , A_SUB   = NULL
 , A_TOTAL = CASE WHEN X = 1 THEN A.A_AMT1 ELSE A.A_AMT2 END
 , AMT1    = CASE WHEN X = 1 THEN A.A_AMT1 ELSE 0 END
 , AMT2    = CASE WHEN X = 1 THEN 0 ELSE A.A_AMT2 END

FROM TESTA A
CROSS JOIN (SELECT X = 1 UNION ALL
   SELECT 2 ) B

) Q
WHERE A_MAIN IS NOT NULL
ORDER BY A_ID

.님이 2008-04-23 15:33에 작성한 댓글입니다. Edit

정말 감사합니다.
매번 도움을 받기만 하네요.

저도 부지런히 내공을 쌓아 님과같이 다른분들께 도움을 줄 날이 빨리 돌아오기만을 기다린답니다.

이만실님이 2008-04-29 11:10에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4191쿼리를 어떻게 짜야 할지 막막합니다.
민재홍
2008-04-26
4173
4190provider 관련 질문 [1]
조성현
2008-04-24
4196
4189질문!! 3개의 DB에 동시에 쿼리(삽입)을 날려서 3개의 DB가 데이터의 일관성을 가지고 싶어여;;
공통
2008-04-23
4016
4188초보 쿼리좀 작성해 주세요. ^^ [2]
이만실
2008-04-23
4072
4187sp4 설치가 안되요 ㅠㅠ
춘곤증
2008-04-23
3837
4186테이블명이 예약어인경우에는 ..? [1]
배원기
2008-04-22
4151
4185mysql -> sql 2005 마이그레이션 중 한글깨짐 현상 [2]
이근
2008-04-22
13316
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다