차수 | 이름 | 수량 | 차수의지불금액 | 해당차수의 품목별지불금액 | |
1차 | 가가 | 80 | 10000 | -> | 8000 |
1차 | 나나 | 20 | 10000 | -> | 2000 |
2차 | 가가 | 400 | 5000 | -> | 5000 |
3차 | 가가 | 500 | 2500 | -> | 2500 |
4차 | 다다 | 10 | 1000 | -> | 1000 |
MS-SQL 사용자입니다.
테이블데이터가 왼쪽표처럼되어있고
최종데이터가 노란색행의 값이 나오도록 쿼리를 짜고있는대요...
여기서 문제가 금액이 차수별로 등록이 됩니다.
원하고자하는값은 품목에 대한 금액인대요...
1차수같은 경우 만원을 지불했지만 품목이 두개입니다.
(데이터가 만원,만원 이렇게 저장되고있음)
그래서 품목별지불값은 수량의 비율로 계산하여 2천원,8천원이 됩니다.
조인,유니온,서브쿼리 아무리해도 값이 나오질 않네요...ㅠㅠ
고수님들 도와주세요...
/*
CREATE TABLE TEST1
(
NUM VARCHAR (10),
NAME VARCHAR (10),
EA
NUMERIC (8,0),
AMT NUMERIC (8,0)
)
INSERT TEST1 VALUES ('1차','가가','80','10000')
INSERT TEST1 VALUES ('1차','나나','20','10000')
INSERT TEST1 VALUES ('2차','가가','400','5000')
INSERT TEST1 VALUES ('3차','가가','500','2500')
INSERT TEST1 VALUES ('4차','다다','10','1000')
*/
Comment 4
-
항해자™
2013.06.21 23:04
-
건우아빠
2013.06.23 15:06
디비 버젼이 어떻게 되는지가 몰라...
2005이상이시면 여러 방법이 있습니다..
CROSS APPLY로도 가능 하고 , 아래 쿼리같은 CTE (2000일 경우는 인라인뷰로 대체) ,
편하게 스칼라 서브 쿼리로도 가능 - 적은건수의 결과를 가지고 서브쿼리를 하는 경우는 성능도 그리 나쁘지는 않습니다.
WITH RES
AS (
SELECT NUM
, SUM(EA) TEA
FROM #TEST1
GROUP BY NUM )SELECT A.NUM
, A.NAME
, A.EA
, A.AMT
, B.TEA
, A.AMT * ( A.EA / B.TEA) JI_AMT
FROM #TEST1 A JOIN RES B ON A.NUM = B.NUM -
건우아빠
2013.06.23 15:07
2005 이상인 경우
SELECT A.NUM
, A.NAME
, A.EA
, A.AMT
, SUM(A.EA) OVER (PARTITION BY A.NUM ) TEA2, A.AMT * ( A.EA / (SUM(A.EA) OVER (PARTITION BY A.NUM ))) JI_AMT2 .
FROM #TEST1 A -
움카카카
2013.06.24 10:51
헉...
이런방법이 있었네요...
많이 배웠습니다
감사합니다~^^*
루프문을 이용해야 할 듯 하네요,,,
SELECT
identity(int,1,1) AS SeqNo
,NUM
INTO dbo.TEMP
FROM dbo.TEST
GROUP BY NUM
HAVING COUNT(*) > 1
하셔서 루프문을 이용해 계산하시면 될 듯,,,
더 좋은 방법이 있다면 다음 분께서^^;;