본문 바로가기

컴퓨터/데이터베이스

2008년 9월 4일

* 1부터 10까지 자연수를 더하여 합계를 출력하시오
 (3의 배수 빼고, 3의 배수이면서 2의 배수인 수는 더하라 출력하라)
declare @i tinyint
declare @sum int


set @i = 1
set @sum=0
while @i < 11
 begin
 if  @i % 3 <> 0
 begin
  set @sum = @sum + @i
 end
 else if @i % 2 = 0
  begin
   set @sum = @sum + @i
   print '3의 배수이면서 2의 배수 : '+cast(@i as char(10))
  end
 set @i = @i + 1
 end

select @sum











* 1부터 10까지 자연수를 더하여 합계를 출력하시오
 (3의 배수 빼고, 3의 배수이면서 2의 배수인 수는 더하라 출력하라)
declare @i tinyint
declare @sum int


set @i = 1
set @sum=0
while @i < 11
 begin
 if  @i % 3 <> 0
 begin
  set @sum = @sum + @i
 end
 else if @i % 2 = 0
  begin
   set @sum = @sum + @i
   print '3의 배수이면서 2의 배수 : '+cast(@i as char(10))
  end
 set @i = @i + 1
 end

select @sum


* 사용자변수명 point를 77점으로 설정하고 90이상 'A',80이상은 'B',
70이상은 'C', 나머지는 'F'라고 학점을 출력하시오(IF문, CASE문)


declare @point tinyint


set @point = 77

if @point >= 90
 print 'A'
else if @point >=80
 print 'B'
else if @point >= 70
 print 'C'
else
 print 'F'


declare @point tinyint, @credit nchar(1)


set @point = 77

if @point >= 90
 set @credit = 'A'
else if @point >=80
 set @credit = 'B'
else if @point >= 70
 set @credit = 'C'
else
 set @credit = 'F'

print @credit

print '취득점수='+cast(@point as char(5))
print '취득학점='+@credit


declare @point tinyint, @grade nchar(1)

set @point = 77

set @grade =
 case
  when (@point >= 90) then 'A'
  when @point >= 80 then 'B'
  when @point >= 70 then 'C'
  else 'F'
 end
print @grade

print '취득점수='+cast(@point as char(5))
print '취득학점='+@grade



* 고객별로 price*amount의 합계가 2000이상이면 '최우수고객',
1000이상이면 '우수고객', 1이상이면 '일반 고객', 나머지는 '유령고객'
이라고 나오도록 출력은 고객번호, 총구매액, 고객내용을 출력하시오
p 275페이지

use sqldb2b
select * from buytbl
declare @grade nchar(5)

select userid, sum(price*amount),


 case
  when (sum(price*amount) >= 2000) then '최우수고객'
  when (sum(price*amount) >= 1000) then '우수고객'
  when (sum(price*amount) >= 1) then '일반고객'
  else '유령고객'
 end as 고객등급

from buytbl
group by userid
--buytbl만 가지고 보면 총구매액이 0인 유령고객은 출력할 수 없다.


* 1부터 10까지 자연수를 더하여 합계를 출력하시오
 (중간에 합계가 20이 넘으면 그만하고 최종수와 합계를 출력하시오)
 (3의 배수는 합계에서 빼고 - continue 이용)
declare @i tinyint
declare @sum int

set @i = 0
set @sum=0
while @i < 10
 begin
 set @i = @i + 1
 if @i % 3 = 0
 begin
  continue
 end

 else
 begin
 set @sum = @sum + @i
 end

 
 
 end

select @i, @sum

print ' 최종수= '+cast(@i as char(5))
print ' 합계= '+cast(@i as char(5))


-- if @sum > 20
--  begin
   --break
--   return --현재 처리 모듈을 종료하고 호출자에게 값을 반환한다
--  end


declare @i tinyint
declare @sum int

set @i = 0
set @sum=0
while @i <= 10
 begin
 
 if @i % 3 = 0
 begin
  set @i = @i + 1
  continue
 end

 set @sum = @sum + @i
 if @sum > 20
  begin
--   break
--   return --현재 처리 모듈을 종료하고 호출자에게 값을 반환한다
   goto endprint
  end
 set @i = @i + 1

 end
endprint:
select @i, @sum

print ' 최종수= '+cast(@i as char(5))
print ' 합계= '+cast(@sum as char(5))


*1부터 10까지 자연수를 더하여 합계를 출력하시오
(try~catch문을 이용하여 런타임시 에러가 발생한 경우 정상종료를 유도한다)

'0으로 나눌 수 없습니다.'라고 출력하고 v_num값을 최종수가 되게 한다.

begin try
declare @v_num tinyint, @v_sum smallint
set @v_num=1
set @v_sum=0
while @v_num <= 10
 begin
  set @v_sum = @v_sum + @v_num
  set @v_num = @v_num + 1
  --set @v_sum = @v_sum/0
  use sqldb2b
  insert into usertbl
  values('AAA','홍길동',1988,'서울')
 end

print ' 최종수= '+cast(@v_num as char(5))
print ' 합계= '+cast(@v_sum as char(5))
end try
begin catch
 set @v_num=@v_num-1
 print ' 최종수= '+cast(@v_num as char(5))
 print ' 합계= '+cast(@v_sum as char(5))
 print error_number()
 print error_message()
end catch