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 3883 게시물 읽기
No. 3883
[질문]하나의 레코드를 경우에따라 두개로 보여주는 방법???
작성자
이만실
작성일
2007-11-20 15:36ⓒ
2007-11-20 15:40ⓜ
조회수
3,352

어제 질문을 했는데 질문의 취지를 정확히 전달하지 못해 다시질문합니다. 

도와 주세요.



TableA 이라는 한개의 테이블에

=============================================

a_id   a_date       a_total a_amt1  a_amt2

=============================================

1       20071120       400    400           0

2       20071120       500    300        200   -->2개로 나눠짐

3       20071120       100    100           0

4       20071120       300    200        100   -->2개로 나눠짐

=============================================

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


a_amt2 필드의 값이 0인경우엔 레코드가 그대로 보여지고


0이 아니경우엔 레코드들 두개로 나누어서


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


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



=====================================================================

a_id   a_date     a_total   a_amt1   a_amt2

=====================================================================

1       20071120    400        400          0       a_amt2 가 0이므로 불변

---------------------------------------------------------------------

2       20071120    300        300          0       두개로 분리 하여 합하면

2       20071120    200           0       200       기존레코드 1개와 일치

---------------------------------------------------------------------

3       20071120    100        100          0       a_amt2 가 0이므로 불변

---------------------------------------------------------------------

4       20071120    200        200          0       두개로 분리 하여 합하면

4       20071120    100           0       100       기존레코드 1개와 일치

=====================================================================


부탁 드립니다.

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

 

CREATE TABLE TESTTB

(A_ID INT,

A_DATE CHAR(8),

A_TOTAL INT,

A_AMT1 INT,

A_AMT2 INT)

GO

 

INSERT INTO TESTTB

SELECT 1, '20071120',  400,  400,     0 UNION ALL

SELECT 2, '20071120',  500,  300,  200  UNION ALL

SELECT 3, '20071120',  100,  100,     0 UNION ALL

SELECT 4, '20071120',  300,  200,  100 

GO    

 

 

SELECT

       A_ID

       , A_DATE

       , A_SUM = ISNULL(A_AMT1, 0) + ISNULL(A_AMT2, 0)

       , A_AMT1 = ISNULL(A_AMT1, 0)

       , A_AMT2 = ISNULL(A_AMT2, 0)

FROM

       (

             SELECT

             A_ID

             , A_DATE

             , A_AMT1 = CASE WHEN A = 1 THEN A_AMT1 ELSE NULL END

             , A_AMT2 = CASE WHEN A = 2 THEN A_AMT2 ELSE NULL END

             FROM TESTTB  A

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

       ) X

WHERE

       ISNULL(A_AMT1, 0) + ISNULL(A_AMT2, 0)  > 0

.님이 2007-11-20 16:49에 작성한 댓글입니다. Edit
 

SELECT A_ID,

       A_DATE,

       CASE A WHEN 1 THEN A_AMT1 WHEN 2 THEN A_AMT2 END A_TOTAL,

       CASE A WHEN 1 THEN A_AMT1 ELSE 0 END A_AMT1,

       CASE A WHEN 2 THEN A_AMT2 ELSE 0 END A_AMT2

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

 WHERE B.A = CASE A.A_AMT2 WHEN 0 THEN 1 ELSE B.A END

.님이 2007-11-20 19:33에 작성한 댓글입니다.
이 댓글은 2007-11-21 17:11에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3886sql2005에서 sa의 비밀번호 변경시 오류.. [2]
='ㅅ'=
2007-11-22
4147
3885월별 카운트를 하고 싶은데... [2]
성용석
2007-11-21
3472
3884[질문] update 문에서 실행시 로그 생성 방법 [1]
완전초보
2007-11-21
3000
3883[질문]하나의 레코드를 경우에따라 두개로 보여주는 방법??? [2]
이만실
2007-11-20
3352
3882DTS패키지를 이용하여 여러 테이블 전송 방법 [3]
곰둘
2007-11-19
3366
3881하나의 레코드를 두개로 나누는방법 ??? [2]
궁금이
2007-11-19
3172
3880관계 대수식 질문입니다.
김희주
2007-11-19
4904
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다