--문제 :
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 |