퇴근5분전

 

문제1 ) http://www.sqler.com/827048#4

 

/* 100000과 가장 가까운 근사치값을 구할때 */


select n, v, abs( v - 100000 )
from (
values
  (1, 1000  ),
  (2, 2300  ),
  (3, 1000  ),
  (4, 5000  ),
  (5, 16000 ),
  (6, 54000 ),
  (7, 8200  ),
  (8, 1500  ),
  (9, 2555  )
  ) as tb( n, v )
order by 3

 

이렇게 하면 가장 가까운게 위로 올라온다.

 

 

문제2 ) http://www.sqler.com/bSQLQA/827651

 

피봇으로 데이타를 만들때 내부 데이타가 집계가 아닌 실제 원소데이타를 포함하도록 뿌려달라는 것 같다.

 


declare @ttb table
(
 TESTBENCH int,
 TESTWEEK varchar(100),
 TESTNAME varchar(100)
)
 
insert into @ttb
select *
from
(
 values
 (1, 'W1618.1', 'TEST1'),
 (1, 'W1618.1', 'TEST2'),
 (1, 'W1618.1', 'TEST3'),
 (1, 'W1618.2', 'TEST1'),
 (1, 'W1618.3', 'TEST2'),
 (2, 'W1618.2', 'TEST1'),
 (2, 'W1618.2', 'TEST3'),
 (2, 'W1618.3', 'TEST2'),
 (2, 'W1618.4', 'TEST2'),
 (2, 'W1618.4', 'TEST3')
) as tb (TESTBENCH, TESTWEEK, TESTNAME )
  


declare @TESTBENCH int
declare @W1 varchar(100), @W2 varchar(100), @W3 varchar(100), @W4 varchar(100)

declare @result table
(
 TESTBENCH int,
 [W1618.1] varchar(100),
 [W1618.2] varchar(100),
 [W1618.3] varchar(100),
 [W1618.4] varchar(100)
)
 
declare rst cursor
for
  select TESTBENCH, [W1618.1], [W1618.2], [W1618.3], [W1618.4]
  from @ttb
  pivot
  (
   count( TESTNAME ) for TESTWEEK in ( [W1618.1], [W1618.2], [W1618.3], [W1618.4] ) 
  ) as p
OPEN rst
FETCH NEXT FROM rst
INTO @TESTBENCH, @W1, @W2, @W3, @W4

WHILE @@FETCH_STATUS = 0
BEGIN
 select @W1 = '', @W2 = '', @W3 = '', @W4 = ''

 select @W1 += TESTNAME + char(10)
   from @ttb
  where TESTBENCH = @TESTBENCH
    and TESTWEEK = 'W1618.1'

    select @W2 += TESTNAME + char(10)
   from @ttb
  where TESTBENCH = @TESTBENCH
    and TESTWEEK = 'W1618.2'

    select @W3 += TESTNAME + char(10)
   from @ttb
  where TESTBENCH = @TESTBENCH
    and TESTWEEK = 'W1618.3'

      select @W4 += TESTNAME + char(10)
   from @ttb
  where TESTBENCH = @TESTBENCH
    and TESTWEEK = 'W1618.4'

 insert into @result
 select @TESTBENCH, @W1, @W2, @W3, @W4

 FETCH NEXT FROM rst
 INTO @TESTBENCH, @W1, @W2, @W3, @W4
END
CLOSE rst;
DEALLOCATE rst;

select *
from @result

 

 

커서를 이용하면 되긴 하는데 고정 컬럼으로 만들었을때 위와 같고, 가변적으로 해야 할때는 부분부분 function으로 동작할수 있게 하고 줄여서

동적 쿼리로 만들어주면 된다.