본문 바로가기

Database/MSSQL work

다른테이블을 내가 등급나눠 업뎃하기

--문제 : 

customersTbl에있는 grade라는 란이 NULL로 비어있다

salesTbl에서 구매한 금액의 총 합이 1만원이상일때 A,

5천원 이상일때 B,

10원 이상일때 C,

구매이력이 없으면 D라고 customersTbl에 저장하려 한다,

 

update.. set.. from절을 사용하여 업데이트 한다

 

 

 

 

 

--join 하여 조건절 확인 후 업뎃

update customersTbl
set 
customersTbl.grade = S.grade
from customersTbl as C,
	(
		select C.custId,
			case when sum(sales) >= 10000 then 'A'
				 when sum(sales) >= 5000 then 'B'
				 when sum(sales) >= 10 then 'C'
				 else 'D'
			end as grade

		from customersTbl C
		left join salesTbl S ON C.custId = S.custId
		group by c.custId
	)
	as S
where c.custId = s.custId

 

 

 

--강사님 방법

update customersTbl
set 
customersTbl.grade = S.grade
from customersTbl inner join
	(
		select C.custId id,
			case when sum(sales) >= 10000 then 'A'
				 when sum(sales) >= 5000 then 'B'
				 when sum(sales) >= 10 then 'C'
				 else 'D'
			end as grade

		from customersTbl C
		left join salesTbl S ON C.custId = S.custId
		group by c.custId
	)
	as S
ON customersTbl.custId = S.id

 

 

 

 

 

 

 

--업뎃말고 그냥 조회하기

select C.custId, C.custName, ISNULL( sum(sales), 0 ) as '총 구매액',

	case when sum(sales) >= 10000 then 'A'
		 when sum(sales) >= 5000 then 'B'
		 when sum(sales) >= 10 then 'C'
		 else 'D'
	end as[고객등급]

from customersTbl C
left join salesTbl S ON C.custId = S.custId
group by C.custId, C.custName
order by sum(sales) desc

 

'Database > MSSQL work' 카테고리의 다른 글

exec 쿼리문 실행  (0) 2020.11.11
에러상태 확인하기  (0) 2020.11.11
union, union all, intersect, except  (0) 2020.11.10
join  (0) 2020.11.10
if문, case문  (0) 2020.11.10