테이블명 ctbl
cid |
officecode |
wcount |
pname |
init_pval |
init_rval |
1 |
종로점 |
1 |
사과 |
0 |
0 |
2 |
종로점 |
1 |
딸기 |
0 |
0 |
3 |
종로점 |
1 |
수박 |
0 |
0 |
4 |
종로점 |
2 |
사과 |
1.5 |
1.3 |
5 |
종로점 |
2 |
딸기 |
1.2 |
1.1 |
6 |
종로점 |
2 |
수박 |
2.1 |
2 |
7 |
종로점 |
2 |
멜론 |
0 |
0 |
테이블명 : wtbl
pid |
officecode |
wcount |
weeknumber |
sdate |
edate |
1 |
종로점 |
1 |
1 |
2012-10-01 |
2012-10-07 |
2 |
종로점 |
1 |
2 |
2012-10-08 |
2012-10-14 |
3 |
종로점 |
2 |
3 |
2012-10-15 |
2012-10-21 |
4 |
종로점 |
2 |
4 |
2012-10-22 |
2012-10-28 |
테이블명 : ptbl
psid |
officecode |
weeknumber |
pname |
pval |
rval |
1 |
종로점 |
1 |
사과 |
0.5 |
0.3 |
2 |
종로점 |
1 |
딸기 |
0.3 |
0.2 |
3 |
종로점 |
1 |
수박 |
0.4 |
0.4 |
4 |
종로점 |
2 |
사과 |
1 |
0.9 |
5 |
종로점 |
2 |
딸기 |
0.9 |
0.7 |
6 |
종로점 |
2 |
수박 |
0.5 |
0.4 |
7 |
종로점 |
3 |
사과 |
0.5 |
0.4 |
8 |
종로점 |
3 |
딸기 |
0.5 |
0.5 |
9 |
종로점 |
3 |
수박 |
0.7 |
0.6 |
10 |
종로점 |
3 |
멜론 |
0.2 |
0.1 |
11 |
종로점 |
4 |
사과 |
0.7 |
0.1 |
12 |
종로점 |
4 |
딸기 |
0.3 |
0.4 |
13 |
종로점 |
4 |
수박 |
0.5 |
0.5 |
14 |
종로점 |
4 |
멜론 |
0.4 |
0.2 |
위와같은 테이블에서 아래와 같은 표를 만들고 싶습니다.
NO |
차수 |
기간 |
지난주 |
금주 |
계획 |
실적 |
계획 |
실적 |
4 |
2 |
2012-10-22~2012-10-28 |
6.7 |
6.0 |
1.9 |
1.2 |
3 |
2 |
2012-10-15~2012-10-21 |
4.8 |
4.4 |
1.9 |
1.6 |
2 |
1 |
2012-10-08~2012-10-14 |
1.2 |
0.9 |
2.4 |
2.0 |
1 |
1 |
2012-10-01~2012-10-07 |
0 |
0 |
1.2 |
0.9 |
1차 의 1번게시물은 지난주 계획, 실적값은 ctbl 테이블를 group by wcount 로 해서 sum(init_pval), sum(init_rval) 값으로 만들어집니다
2차의 첫번째게시물 (3번게시물)도 같은 방법으로 채워집니다.
4번게시물은
3번게시물의 지난주 계획값 + 3번게시물의 금주 계획값 = 4번 게시물의 지난주 계획값
3번게시물의 지난주 실적값 + 3번게시물의 금주 실적값 = 4번 게시물의 지난주 실적값
이렇게 보이게끔 하려 합니다.
레코드가 쌓이거나 아님 차수가 변경되어도 위와 같은 방법으로 표현을 하려하려 합니다.
이전까지는 루프안에서 IF절로 제어해서 출력을 했는데 한번의 쿼리로 변경하고 싶습니다.
(루프안에 대여섯개의 쿼리문이 존재해서 속도가 많이 느립니다)
생각처럼 어렵지 않을꺼 같아서 여러 조인과 셀프조인을 이용해봤으나 원하는 값이 안나오네요... ㅜㅜ
테이블 설계가 잘못된건가요?
이전에도 큰 도움을 받았는데 이번에도 절실합니다.
이 쿼리때문에 5일동안 진도를 못나가 무례를 무릅쓰고 이렇게 다시 질문 올립니다.
감사합니다.
http://sqlfiddle.com/#!2/35bda
CREATE TABLE `ctbl` (
`cid` int(8) NOT NULL AUTO_INCREMENT,
`officecode` varchar(64) NOT NULL,
`wcount` int(3) NOT NULL,
`pname` varchar(20) NOT NULL,
`init_pval` float(6,1) NOT NULL DEFAULT '0.0',
`init_rval` float(6,1) NOT NULL DEFAULT '0.0',
PRIMARY KEY (`cid`)
);
insert into ctbl values ('1','종로점','1','사과','0','0');
insert into ctbl values ('2','종로점','1','딸기','0','0');
insert into ctbl values ('3','종로점','1','수박','0','0');
insert into ctbl values ('4','종로점','2','사과','1.5','1.3');
insert into ctbl values ('5','종로점','2','딸기','1.2','1.1');
insert into ctbl values ('6','종로점','2','수박','2.1','2.0');
insert into ctbl values ('7','종로점','2','멜론','0','0');
CREATE TABLE `wtbl` (
`pid` int(8) NOT NULL AUTO_INCREMENT,
`officecode` varchar(64) NOT NULL,
`wcount` int(3) NOT NULL,
`weeknumber` int(3) NOT NULL,
`sdate` date NOT NULL,
`edate` date NOT NULL,
PRIMARY KEY (pid)
);
insert into wtbl values ('1','종로점','1','1','2012-10-01','2012-10-07');
insert into wtbl values ('2','종로점','1','2','2012-10-18','2012-10-14');
insert into wtbl values ('3','종로점','2','3','2012-10-15','2012-10-21');
insert into wtbl values ('4','종로점','2','4','2012-10-22','2012-10-28');
CREATE TABLE `ptbl` (
`psid` int(9) NOT NULL AUTO_INCREMENT,
`officecode` varchar(64) NOT NULL,
`weeknumber` int(3) NOT NULL,
`pname` varchar(20) NOT NULL,
`pval` float(6,1) NOT NULL DEFAULT '0.0',
`rval` float(6,1) NOT NULL DEFAULT '0.0',
PRIMARY KEY (`psid`)
);
insert into ptbl values ('1','종로점','1','사과','0.5','0.3');
insert into ptbl values ('2','종로점','1','딸기','0.3','0.2');
insert into ptbl values ('3','종로점','1','수박','0.4','0.4');
insert into ptbl values ('4','종로점','2','사과','1.0','0.9');
insert into ptbl values ('5','종로점','2','딸기','0.9','0.7');
insert into ptbl values ('6','종로점','2','수박','0.5','0.4');
insert into ptbl values ('7','종로점','3','사과','0.5','0.4');
insert into ptbl values ('8','종로점','3','딸기','0.5','0.5');
insert into ptbl values ('9','종로점','3','수박','0.7','0.6');
insert into ptbl values ('10','종로점','3','멜론','0.2','0.1');
insert into ptbl values ('11','종로점','4','사과','0.7','0.1');
insert into ptbl values ('12','종로점','4','딸기','0.3','0.4');
insert into ptbl values ('13','종로점','4','수박','0.5','0.5');
insert into ptbl values ('14','종로점','4','멜론','0.4','0.2'); |