
case when ์กฐ๊ฑด than ๊ฐ end
ย ๐จ ๋ฌธ์
๐ (์ ํ๋ณ)์ถ๊ณ ๋งค์ถ์ด์ตํต๊ณ
์ ํ์ฝ๋ ์ ํ๋ช ์ถ๊ณ ์๋ ์ถ๊ณ ๋งค์ถ์ด์ต B01 ๊ฒฝ๋์ ์๋ฐํด 30 ๏ฟฆ18,000 B02 ์ค๋์ ์๋ฐํด 25 ๏ฟฆ20,000 B03 ์ฐ๋ ํ1.0์ธ์น 50 ๏ฟฆ25,000 B04 ์ฐ๋ ํ1.5์ธ์น 40 ๏ฟฆ24,000 B05 ์ฐ๋ ํ2.0์ธ์น 60 ๏ฟฆ42,000
๐ ์ถ๊ณ ๋งค์ถ์ด์ต ๊ตฌํ๋ ์
ย ์ถ๊ณ ๋งค์ถ์ด์ต = ์ ํ๋ณ ์ถ๊ณ ์๋ * (์ ํ๋ณ ์ถ๊ณ ๋จ๊ฐ - ์ ํ๋ณ ์ ๊ณ ๋จ๊ฐ)
ย ๐จ ํ ์ด๋ธ ๋ฐ ๋ฐ์ดํฐ
๐ ํ ์ด๋ธ
<์ ํ ์ ๋ณด ํ ์ด๋ธ> create table tbl_product_202002 ( p_code char(3) not null, --์ ํ์ฝ๋ p_name varchar2(20), --์ ํ๋ช p_size number, --์ฌ์ด์ฆ p_incost number, --๋งค์ ๋จ๊ฐ p_outcost number, --์ถ๊ณ ๋จ๊ฐ constraint tbl_product_202002_pk primary key (p_code) );<๊ฑฐ๋์ฒ ์ ๋ณด ํ ์ด๋ธ> create table tbl_company_202002 ( c_code char(3) not null, --๊ฑฐ๋์ฒ์ฝ๋ c_name varchar2(20), --๊ฑฐ๋์ฒ๋ช c_tel1 char(3), --์ ํ1 c_tel2 char(4), --์ ํ2 c_tel3 char(5), --์ ํ3 constraint tbl_company_202002_pk primary key (c_code) );<์ ์ถ๊ณ ์ ๋ณด ํ ์ด๋ธ> create table tbl_inout_202002 ( t_no char(8) not null, --์ ์ถ๊ณ ๋ฒํธ p_code char(3), --์ ํ์ฝ๋ t_type char(1), --์ ์ถ๊ณ ๊ตฌ๋ถ t_cnt number, --์๋ t_date date, --๊ฑฐ๋์ผ์ c_code char(3), --๊ฑฐ๋์ฒ์ฝ๋ constraint tbl_inout_202002_pk primary key (t_no) );
๐ ๋ฐ์ดํฐ
<์ ํ ์ ๋ณด ํ ์ด๋ธ> insert into tbl_product_202002 values ('B01','๊ฒฝ๋์ ์๋ฐํด',150,3000,3600); insert into tbl_product_202002 values ('B02','์ค๋์ ์๋ฐํด',200,4000,4800); insert into tbl_product_202002 values ('B03','์ฐ๋ ํ1.0์ธ์น',250,2500,3000); insert into tbl_product_202002 values ('B04','์ฐ๋ ํ1.5์ธ์น',300,3000,3600); insert into tbl_product_202002 values ('B05','์ฐ๋ ํ2.0์ธ์น',350,3500,4200); insert into tbl_product_202002 values ('B06','์ฐ๋ ํ2.5์ธ์น',400,4000,4800);<๊ฑฐ๋์ฒ ์ ๋ณด ํ ์ด๋ธ> insert into tbl_company_202002 values ('10','์์ธ๊ณต์ฅ','02','1488','1000'); insert into tbl_company_202002 values ('20','์ธ์ฐ๊ณต์ฅ','052','1488','2000'); insert into tbl_company_202002 values ('30','๋ถ์ฐ์์ฌ','051','1488','3000'); insert into tbl_company_202002 values ('40','๊ด์ฃผ์์ฌ','062','1488','4000'); insert into tbl_company_202002 values ('50','๋์ ์์ฌ','042','1488','4000');<์ ์ถ๊ณ ์ ๋ณด ํ ์ด๋ธ> insert into tbl_inout_202002 values ('20200001','B01','|',100,'20200101','10'); insert into tbl_inout_202002 values ('20200002','B02','|',100,'20200101','10'); insert into tbl_inout_202002 values ('20200003','B03','|',200,'20200101','20'); insert into tbl_inout_202002 values ('20200004','B04','|',300,'20200101','20'); insert into tbl_inout_202002 values ('20200005','B05','|',400,'20200101','20'); insert into tbl_inout_202002 values ('20200006','B06','|',400,'20200101','20'); insert into tbl_inout_202002 values ('20200007','B01','O',30,'20200102','30'); insert into tbl_inout_202002 values ('20200008','B02','O',25,'20200102','40'); insert into tbl_inout_202002 values ('20200009','B03','O',50,'20200103','40'); insert into tbl_inout_202002 values ('20200010','B04','O',40,'20200104','30'); insert into tbl_inout_202002 values ('20200011','B05','O',60,'20200104','50');
ย ๐จ ํธ๋ ๋ฐฉ๋ฒ ์๊ฐํ๊ธฐ
1. ์ถ๋ ฅํด์ผํ ๊ฒ
๊ทธ๋๋ก ์ถ๋ ฅํ๋ฉด ๋๋ ๊ฒ
p.p_code(์ ํ์ฝ๋), p.p_name(์ ํ๋ช
)
์กฐ๊ฑด์ ๋ฐ๋ผ ์ผ๋ถ๋ง ์ถ๋ ฅํด์ผ ํ๋ ๊ฒ
t_type(์
์ถ๊ณ ๊ตฌ๋ถ) = 'O(์ถ๊ณ )' ์ธ t_cnt(์๋)
์ถ๊ณ ๋งค์ถ์ด์ต
์ ํ๋ณ ์ถ๊ณ ์๋ * (์ ํ๋ณ ์ถ๊ณ ๋จ๊ฐ - ์ ํ๋ณ ์
๊ณ ๋จ๊ฐ)
์ ํ๋ณ ์ถ๊ณ ์๋ = t_type(์
์ถ๊ณ ๊ตฌ๋ถ) = 'O(์ถ๊ณ )' ์ธ t_cnt(์๋)
์ ํ๋ณ ์ถ๊ณ ๋จ๊ฐ = p_outcost(์ถ๊ณ ๋จ๊ฐ)
์ ํ๋ณ ์
๊ณ ๋จ๊ฐ = p_incost(์
๊ณ ๋จ๊ฐ)
2. case when ~ than ~end ๋ฅผ ์ด์ฉํ์ฌ t_type(์ ์ถ๊ณ ๊ตฌ๋ถ)์ด 'O(์ถ๊ณ )' ์ธ t_cnt(์๋) ๊ตฌํ๊ธฐ
CASE WHEN i.t_type = 'O' THEN i.t_cnt END AS ์ปฌ๋ผ๋ช
3. t_type(์ ์ถ๊ณ ๊ตฌ๋ถ)์ด 'O(์ถ๊ณ )' ์ธ t_cnt(์๋)์ ๋ค๋ฅธ ์กฐ๊ฑด ๊ณฑํ๊ธฐ
sum(p.p_outcost - p.p_incost) * CASE WHEN i.t_type = 'O' THEN i.t_cnt END as ์ปฌ๋ผ๋ช
4. ์์์ ๋ง๋ ์ปฌ๋ผ select๊ตฌ์ ์ ๋ฃ๊ธฐ
5. Join ๋ฌธ์ฅ ์์ฑ
ย ๐จ ์ ๋ต
๐ (์ ํ๋ณ)์ถ๊ณ ๋งค์ถ์ด์ตํต๊ณ
SELECT p.p_code, p.p_name, CASE WHEN i.t_type = 'O' THEN i.t_cnt END AS t_cnt, sum(p.p_outcost - p.p_incost)*CASE WHEN i.t_type = 'O' THEN i.t_cnt END as tot FROM tbl_product_202002 p, tbl_inout_202002 i where p.p_code = i.p_code and CASE WHEN i.t_type = 'O' THEN i.t_cnt END is not null GROUP BY p.p_code, p.p_name, CASE WHEN i.t_type = 'O' THEN i.t_cnt END order by p.p_code asc;
ย ๐จ ์ฃผ์์ฌํญ
CASE WHEN ~ ๋ฌธ์ฅ์ด ์์ผ๋ก ๊ฐ๋ฉด ๊ฐ ๊ณ์ฐ ์๋จ
SELECT p.p_code, p.p_name, CASE WHEN i.t_type = 'O' THEN i.t_cnt END AS t_cnt, sum(p.p_outcost - p.p_incost)*CASE WHEN i.t_type = 'O' THEN i.t_cnt END as tot FROM tbl_product_202002 p, tbl_inout_202002 i where p.p_code = i.p_code and CASE WHEN i.t_type = 'O' THEN i.t_cnt END is not null GROUP BY p.p_code, p.p_name, CASE WHEN i.t_type = 'O' THEN i.t_cnt END order by p.p_code asc;