안녕하세요.
쿼리 초보자 입니다.
이곳에서 많은 정보 와 지식을 얻어 가고 있습니다.
다름이 아니라 제가 쿼리를 하나 만들어야 하는데요
좀 복잡한 쿼리 이긴 한데 어느정도 완성은 되어 가고 있습니다.
그런데 문제가 생겼네요.
tmp_table 에 제품코드, 제품명, 수량 이렇게 들어가 있는데요.
제품코드로 조건을 걸고 조회시 제품수량 수 만큼 로우가 생성이 되야 해서요.
도움 부탁드리겠습니다..
새해복 많이 받으세요..
제가 이해를 제대로 한 것인지 모르겠네요..
제품코드 수만큼 Row를 만들어야 된다..
라고 이해를 했구요.....(잘못 이해했을지도 모르겠네요..)
조건절이야 Where 절 걸면 될듯하여
안넣었습니다.
With tmp_table As ( Select 'TV' As code,'텔레비전' As name,40 As qty Union All Select 'VIDEO' As code,'비디오' As name,940 As qty Union All Select 'TV' As code,'텔레비전' As name,40 As qty Union All Select 'RADIO' As code,'라디오' As name,10 As qty Union All Select 'TV' As code,'텔레비전' As name,2 As qty Union All Select 'RADIO' As code,'라디오' As name,40 As qty Union All Select 'VIDEO' As code,'비디오' As name,140 As qty ) Select A.code As code ,MAX(A.name) As name ,SUM(A.qty ) As qty From tmp_table As A Group By A.code Order By A.code ASC
감사합니다.
제가 질문을 드린건..
제품코드 제품명 수량
0001 티비 5
0002 라됴 3
0003 비됴 2
이렇게 데이터가 들어가 있으면
수량 수만큼 로우가 생성되야 합니다.
티비 5줄
라됴 3줄
비됴 2줄
이렇게 총 10개의 로우가 생성되야 합니다.
WITH tmp_table AS ( SELECT '0001' cd, '티비' nm, 5 cnt UNION ALL SELECT '0002', '라됴', 3 UNION ALL SELECT '0003', '비됴', 2 ) , tmp AS ( SELECT cd, nm, cnt , 1 rn FROM tmp_table UNION ALL SELECT cd, nm, cnt , rn + 1 rn FROM tmp WHERE rn + 1 <= cnt ) SELECT * FROM tmp ORDER BY cd, rn ;
마농님 답변감사합니다.
혹시 저 쿼리가 mssql2000 에서도 돌아 갈까요.??
아직까지 2000을 못버린 1인입니다.
mssql 2000 에서 돌아가는지는 제가 모르겠네요.
직접 실행해 보시고 결과 알려주세요.
네 마농님 테스트 해보았습니다.
2005 에서는 잘되는데
2000 에는 에러가 나네요..ㅠㅠ
부탁좀 드리겠습니다.
WITH tmp_table AS ( SELECT '0001' cd, '티비' nm, 5 cnt UNION ALL SELECT '0002', '라됴', 3 UNION ALL SELECT '0003', '비됴', 2 ) , copy_t AS ( SELECT 1 rn UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 ) SELECT * FROM tmp_table a INNER JOIN copy_t b ON a.cnt >= b.rn ORDER BY cd, rn ;
마농님 빠른답변 감사드립니다.
2000에서 실행시
(
SELECT '0001' cd, '티비' nm, 5 cnt
UNION ALL SELECT '0002', '라됴', 3
UNION ALL SELECT '0003', '비됴', 2
)
, copy_t AS
SELECT 1 rn
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
이구문 자체가 오류가 나네요..
저구분을 변경할수는 없을까요.??
그리고 coyp_t 라는 테이블을 사용하는 이유도 좀 알려주세요.
초보라 아는게 없습니다.
WITH 구문은 실제 테이블이 없어서 대신 사용한 거구요. WITH 구문 없이 Select 부터 사용하시면 됩니다. copy_t 테이블 또한 미리 만들어 두셔야 합니다.(숫자 넉넉하게) 이와 같은 요구사항이 있을 때 유용하게 사용될 테이블입니다.
마농님 감사합니다.
해결되었습니다.
새해복 많이 받으세요.