본문 바로가기

Database/MSSQL work

if문, case문

--변수
declare로 선언하고 set으로 할당한다

 

 

 

--if문

if ..else 안에 begin...end문을 반복하여 사용한다

 

--1.

declare @var1 int
set @var1=100

--if문
if @var1 = 100
	begin
		print '@var1 = ' + cast(@var1 as char(4))--cast로 문자로 변환해줌
	end
else
	begin
		print '@var1 != ' + cast(@var1 as char(4))
	end

--@var1 = 100 

 

 

 

 

 

--2.

use AdventureWorks2019

declare @hireDate smalldatetime;
declare @curDate smalldatetime;
declare @years decimal(5,2);
declare @days int;

select @hireDate = HireDate
from HumanResources.Employee
where BusinessEntityID = 111

set @curDate = GETDATE()
set @years = DATEDIFF(year, @hireDate, @curDate)
set @days = DATEDIFF(day, @hireDate, @curDate)

if(@years >= 5)
	begin
		print N'입사한 지 ' + cast(@days as char(5)) + N'일이 지났습니다.'
		print N'장기근속수당 대상자입니다.'
	end
else
	begin 
		print N'입사한 지' + cast(@days as char(5)) + N'일 밖에 안되었습니다.'
		print N'계속 열심히 근무하세요.'
	end

--입사한 지 4346 일이 지났습니다.
--장기근속수당 대상자입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--case문

set 최종값, 아래

case ...end 사이에 when을 사용하여 값을 설정한다

declare @point int = 77, @credit nchar(1)

set @credit = 
	case
		when (@point >= 90) then 'A'
		when (@point >= 80) then 'B'
		when (@point >= 70) then 'C'
		when (@point >= 60) then 'D'
		else'F'
	end
print N'점수 ==> ' + cast(@point as char(3))
print N'학점 ==> ' + @credit



--점수 ==> 77 
--학점 ==> C

 

 

 

 


--고객 등급 if문으로 출력
--만원이상 A, 5천원이상 B, 10원이상 C, 구매안한고객 D

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

 

--grade를 update..set..from 구문으로 값 입력하기

select *from customersTbl


update customersTbl
set 
customersTbl.grade = S.grade2
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 grade2

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

 

 

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

union, union all, intersect, except  (0) 2020.11.10
join  (0) 2020.11.10
NULL 값을 0으로 표시  (0) 2020.11.10
Rollup(), Grouping  (0) 2020.11.09
CTE  (0) 2020.11.09