퇴근5분전

에러 내용 : 

        ssms를 켜고 솔루션 창이나 출력, 속성창등을 드래그 해서 창을 프로그램에서 꺼낸 후 다시 드래그로

     원하는 위치로 넣을때 프로그램이 종료되는 현상.

 

 

해결방법 : 

    docs.microsoft.com/en-us/answers/questions/263738/ssms-188-crashes-when-re-docking-tabs.html

 

SSMS 18.8 crashes when re-docking tabs - Microsoft Q&A

 

docs.microsoft.com

   VinnieAmir-0621   <---- 이사람 답변

 

 구글번역 : 

모든 SSMS 창을 닫고 SQL Mgt Studio EXE 파일을 찾으십시오.

C:\Program Files(x86)\Microsoft SQL Server Management Studio 18\Common7\IDE 찾을 수 없는 경우

SSMS를 여는 데 사용하는 바로 가기를 마우스 오른쪽 단추로 클릭하고 속성> 파일 위치 열기로 이동합니다.

이 파일을 찾으면 "Ssms.exe.config"라는 파일도 찾아서 관리자 모드에서 메모장을 열고이 파일을 편집합니다.

그런 다음 라는 xml 태그를 찾아야하며 다음을 정확히 APPEND (대체 아님)해야합니다.

;Switch.System.Windows.Interop.MouseInput.OptOutOfMoveToChromedWindowFix=true;Switch.System.Windows.Interop.MouseInput.DoNotOptOutOfMoveToChromedWindowFix=true

 

ssms.exe.config 중에서 수정한 부분

 

그리고 그게 다입니다. 이제이 불쾌한 충돌을 피할 수 있습니다.

https://support.microsoft.com/en-us/topic/february-9-2021-kb4601060-cumulative-update-for-net-framework-3-5-and-4-7-2-for-windows-10-version-1809-and-windows-server-version-2019-b240d07e-639f-d708-98c9-0cbe443176aa

 

 

ps : 

    새 프로젝트를 시작하면서 기존 노트북이 망가져서 새 노트북에 환경설정을 마쳤었다. 

   크리스탈 리포트 관련 이슈가 있어서 해결하는 과정에서 ssms를 실행하고 프로시저를 확인하려고 

  내가 만들어 넣은 오브젝트 탐색기를 가동시켜 프로시저를 찾았는데...

  이게 설정 후 처음 열리는 것이라 팝업형태로 떠있길래 드래그 해서 프로그램안으로 밀어넣었는데... 

  강제종료??? 

 

  여러번 해봤지만 역시나 에러로 종료되어 내 개발pc에서 확장프로그램 소스를 이용하여 ssms를 열고 동일한 에러가 발생하였다. ssms버젼확인 후 18.5에서 해결되었다는 글을 보고 최신버젼 18.8을 설치하였으나 동일한 증상이 일어났다.

 

  혹시나 하여 14, 16, 17버젼 모두 실행해서 확인해본결과 14빼고 모두 동일하게 강제종료 되었다.

 잘 되던게 왜이러나 하고... 고민하던 중에... 내가 만든 것만 그런가? 라는 생각에...

 ssms에 원래 있던 창인 "출력" 창을 열어서 드래그해서 붙여보니 ... 동일하게 강제종료 현상이 발생하였다. 

다행이 내 프로그램문제는 아니구나 하고 검색... 검색... ....

 

 찾았다. 영어가 안되는게 참 서글픈... 크롬에서 번역기능이 없었으면... 찾았을까 싶다.

 머리가 나빠서 쉽지 않은 삶이야...

 

 

 

환경 : 오라클 12C

 

피봇은 주로 사용해왔으니... 원래 알던 개념이었다.

언피봇은 무조건 피봇의 반대라고 생각했었는데...

 

율촌 프로젝트 하면서 공부를 다시 하게 되었다.

언피봇과 피봇을 합치면 멋진 결과가 나오더라.

 - MES 생산결과를 뽑아 낼때 투입대비, 생산량을 뽑아내는 쿼리에 적용했었다.

 -- 탭키 간격이 안먹넹...

 

SELECT *
FROM
(
SELECT *
FROM
(
SELECT '데이타' A, 1 K, 10 DATA1, 20 DATA2
,'NO 1의 설명' NO1_DESC
,'NO 2의 설명' NO2_DESC
FROM DUAL
UNION ALL
SELECT '데이타' A, 2 K, 30 DATA1, 40 DATA2
,'NO 1의 설명' NO1_DESC
,'NO 2의 설명' NO2_DESC
FROM DUAL
UNION ALL
SELECT '데이타' A, 3 K, 50 DATA1, 60 DATA2
,'NO 1의 설명' NO1_DESC
,'NO 2의 설명' NO2_DESC
FROM DUAL
) A
UNPIVOT
(
( NO_DESC, DATA ) FOR
NO IN
(
(NO1_DESC, DATA1) AS 1,
(NO2_DESC, DATA2) AS 2
)
)
) T
PIVOT
(
MIN( DATA ) AS DATA FOR
K IN ( 1 , 2, 3 )
)
;

 

언피봇 한 결과
위 결과를 피봇한 결과

 

** 음... mssql이랑 다른가? 이상하게 동작하네...

   오라클은 위 문법에 맞춰서 작성하면 잘 되던뎅...

동일한 결과로 mssql로 만들려면 다르게 작성해야 한다.

 

unpivot 도 내가 원래 알던대로 mssql은 동작하고...

오라클로 테스트를 못해보니까 아쉽네...

뭔가 좀 다르게 동작하는 듯 한데... 어떻게 보면 같은것 같기도 하고...

다음에 오라클 쓸때가 오면 다시 비교해봐야겠다.

 

'# 7) 데이타베이스 > 오라클' 카테고리의 다른 글

집계함수 MIN, MAX에 해당하는 다른 컬럼값은?  (0) 2019.11.03
GROUP 콤마구분자로 연결하기  (0) 2019.11.03
달력2  (0) 2019.11.03
달력 1  (0) 2019.11.03
[오라클] 동적쿼리  (0) 2010.10.24

환경 : 오라클 12C

 

-- 해석 : K가 가장 높은 값의 V는 뭐지?,

--          K가 가장 낮은 값의 V는 뭐지?

SELECT MAX( V ) KEEP ( DENSE_RANK FIRST ORDER BY K DESC ) MAX_K_V

        , MIN( V ) KEEP ( DENSE_RANK LAST ORDER BY K DESC ) MIN_K_V

FROM

(

SELECT 1 K, 'A' V FROM DUAL UNION ALL

SELECT 0 K, 'B' V FROM DUAL UNION ALL

SELECT 3 K, 'C' V FROM DUAL UNION ALL

SELECT 9 K, 'D' V FROM DUAL UNION ALL

SELECT 5 K, 'E' V FROM DUAL UNION ALL

SELECT 6 K, 'F' V FROM DUAL

) Z

'# 7) 데이타베이스 > 오라클' 카테고리의 다른 글

피봇(pivot)과 언피봇(unpivot) 응용  (0) 2019.11.03
GROUP 콤마구분자로 연결하기  (0) 2019.11.03
달력2  (0) 2019.11.03
달력 1  (0) 2019.11.03
[오라클] 동적쿼리  (0) 2010.10.24

환경 : 오라클 12C

 

 

SELECT LISTAGG( GROUP_KEY || '_V, ' || GROUP_KEY || '_R' , ', ') WITHIN GROUP (ORDER BY GROUP_KEY) V1

FROM (

SELECT 1 GROUP_KEY FROM DUAL UNION ALL

SELECT 2 GROUP_KEY FROM DUAL UNION ALL

SELECT 3 GROUP_KEY FROM DUAL UNION ALL

SELECT 4 GROUP_KEY FROM DUAL

) A;

 

결과 : 1_V, 1_R, 2_V, 2_R, 3_V, 3_R, 4_V, 4_R

 

 

반대로

 

select TRIM(REGEXP_SUBSTR( COLS, '[^,]+', 1, 1, 'i')) COL1

,TRIM(REGEXP_SUBSTR( COLS, '[^,]+', 1, 2, 'i')) COL2

,TRIM(REGEXP_SUBSTR( COLS, '[^,]+', 1, 3, 'i')) COL3

,TRIM(REGEXP_SUBSTR( COLS, '[^,]+', 1, 4, 'i')) COL4

from

(

SELECT 'A,B,C,D' COLS

FROM DUAL

) a

;

'# 7) 데이타베이스 > 오라클' 카테고리의 다른 글

피봇(pivot)과 언피봇(unpivot) 응용  (0) 2019.11.03
집계함수 MIN, MAX에 해당하는 다른 컬럼값은?  (0) 2019.11.03
달력2  (0) 2019.11.03
달력 1  (0) 2019.11.03
[오라클] 동적쿼리  (0) 2010.10.24

환경 : 오라클 12C

 

 일하다보면 스케쥴관리를 구현할때가 있는데...

그 샘플 쿼리이다.

 

 

WITH MONTH_DAY

AS

(

SELECT ( TRUNC( TO_DATE( :AV_DAY , 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) - 1 )) + LEVEL - 1 DD

FROM DUAL

CONNECT BY LEVEL <= ( ( LAST_DAY( TO_DATE(:AV_DAY, 'YYYYMMDD') ) + ( 7 - TO_CHAR( LAST_DAY( TO_DATE(:AV_DAY, 'YYYYMMDD') ), 'D' ))) -- 종료일

- ( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) - 1 )) + 1 ) -- 시작일

), DATA_TMP

AS

(

SELECT LEVEL - 1 LV

FROM DUAL

CONNECT BY LEVEL <= 5

)

, DATA_CONT

AS

(

SELECT A.LV, B.DD, B.VAL1

FROM DATA_TMP A

,

(

SELECT TO_DATE( '20190303', 'YYYYMMDD') DD, 1 LV, '값1' VAL1 FROM DUAL UNION

SELECT TO_DATE( '20190303', 'YYYYMMDD') DD, 2 LV, '값2' VAL1 FROM DUAL UNION

SELECT TO_DATE( '20190403', 'YYYYMMDD') DD, 1 LV, '0403' VAL1 FROM DUAL UNION

SELECT TO_DATE( '20190303', 'YYYYMMDD') DD, 3 LV, '332' VAL1 FROM DUAL

)B

WHERE A.LV = B.LV(+)

)

, MONTH_DAY_WEEK

AS

(

SELECT A.DD

, TRUNC( (TO_NUMBER( A.DD - ( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) ))) - 1 )/ 7) WEEK

, TO_CHAR( A.DD, 'DY' ) DAYOFWEEK

, B.LV

, CASE WHEN B.LV = 0 THEN TO_CHAR( A.DD, 'DD' ) ELSE C.VAL1 END VAL1

FROM MONTH_DAY A, DATA_TMP B, DATA_CONT C

WHERE A.DD = C.DD(+)

AND B.LV = C.LV(+)

)

 

select *

from

(

SELECT TO_CHAR( MIN(DD), 'YYYYMMDD') || '~' || TO_CHAR( MAX( DD ), 'YYYYMMDD') FROMTO

, WEEK

, LV

, MAX("''") "SUN"

, MAX("''") "MON"

, MAX("''") "TUE"

, MAX("''") "WED"

, MAX("''") "THU"

, MAX("''") "FRI"

, MAX("''") "SAT"

FROM MONTH_DAY_WEEK

PIVOT

(

MAX( VAL1 ) FOR DAYOFWEEK IN ( '', '', '', '', '', '', '' )

) A

GROUP BY WEEK, LV

ORDER BY WEEK, LV

)

;

 

스케쥴이 포함된 달력 표시

 

환경 : 오라클 12C

 

WITH MONTH_DAY

AS

(

SELECT ( TRUNC( TO_DATE( :AV_DAY , 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) - 1 )) + LEVEL - 1 DD

FROM DUAL

CONNECT BY LEVEL <= ( ( LAST_DAY( TO_DATE(:AV_DAY, 'YYYYMMDD') ) + ( 7 - TO_CHAR( LAST_DAY( TO_DATE(:AV_DAY, 'YYYYMMDD') ), 'D' ))) -- 종료일

- ( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) - 1 )) + 1 ) -- 시작일

)

, MONTH_DAY_WEEK

AS

(

SELECT DD

, TRUNC( (TO_NUMBER(DD - ( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM') -1 * ( TO_CHAR( TRUNC( TO_DATE(:AV_DAY, 'YYYYMMDD'), 'MM'), 'D' ) ))) - 1 )/ 7) WEEK

, TO_CHAR( DD, 'DY' ) DAYOFWEEK

, TO_CHAR( DD, 'DD' ) VAL1

FROM MONTH_DAY

)

SELECT TO_CHAR( MIN(DD), 'YYYYMMDD') || '~' || TO_CHAR( MAX( DD ), 'YYYYMMDD') FROMTO

, WEEK

, MAX("''") "SUN"

, MAX("''") "MON"

, MAX("''") "TUE"

, MAX("''") "WED"

, MAX("''") "THU"

, MAX("''") "FRI"

, MAX("''") "SAT"

FROM MONTH_DAY_WEEK

PIVOT

(

MAX( VAL1 ) FOR DAYOFWEEK IN ( '', '', '', '', '', '', '' )

) A

GROUP BY WEEK

ORDER BY WEEK

;

 

:AV_DAY := '20191001'

 

달력이 표시됨.

 

 

sqler 질문글..

http://www.sqler.com/942478#1

 

아래처럼 풀이해봤음.

 

/*
col1 | col2

 1       10

 2       20

 3       30

 4       40

*/


;with tb
as
(
 select 1 as col1, 10 as col2
 union
 select 2 as col1, 20 as col2
 union
 select 3 as col1, 30 as col2
 union
 select 4 as col1, 40 as col2
)

select case when col = 1 then tmp1.col1 else tmp2.col11 end as col1,
   case when col = 1 then tmp1.col2 else tmp2.col22 end as col2
from ( values( 1),( 2 ) ) as tab ( col )
left join
(
 select 1 as k, col1, col2
 from tb
) as tmp1
on   tab.col = tmp1.k
left join
(
 select 2 as k, count( col1 ) as col11, sum( col2 ) as col22
    from tb
) as tmp2
on tab.col = tmp2.k

 

 

 

 

sqler에 질문글..

http://www.sqler.com/bSQLQA/862019

 

심심해서....  

 

 

;with tmp
as
(
select *
from
(
    values 
        (1,         '2008-01-02 00:00:00.000' ),
        (2,          NULL),
        (3,          NULL),
        (4,          '2008-01-03 00:00:00.000'),
        (5,          NULL),
        (6,          NULL),
        (7,          NULL),
        (8,          NULL),
        (9,          '2008-01-04 00:00:00.000'),
        (10,         NULL),
        (11,         NULL)
) as tb (a, b )
)

select a, isnull( b , ( select max( b ) from tmp where a < bs.a )) as bb
from tmp as bs

피벗으로 하는 건데...

문제 차제가 조금 데이타가 부족해보였다.

그림에 보이는데로 나오는 걸 일부 수정해서 풀었지만...

동적으로 늘어나는 데이타 컬럼에 대해서 처리를 위해 동적쿼리를 만들어야 되는데...

과연? 얼마나 사이즈가 늘어날지는 실 데이타로 처리 해봐야 하니 .. 모르겠고,  

 

문제 : http://www.sqler.com/828698#1

 

## 첫풀이 : 공백으로 처리 했지만 char(10)으로 바꾸면 enter값을 넣어서 뿌리는 건 비슷하게 나온다.


;with tb
as
(
    SELECT ITEM_CD, SPEC, SO_DT + ' ' + DLVY_DT + ' '+  SOLD_TO_PARTY_NM as HD, SO_QTY
    FROM (
        VALUES
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-10', '2016-05-13', 'TMEH-J', 2400 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-12', '2016-05-20', 'TMEH-J', 4800 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-17', '2016-05-20', 'TMEH-J', 10800 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-13', '2016-05-20', 'AXIS', 2400 )

    ) AS TB ( ITEM_CD, SPEC, SO_DT, DLVY_DT, SOLD_TO_PARTY_NM, SO_QTY )
)
SELECT *
  from tb
    pivot
    (
         sum( SO_QTY ) for HD in (
            [2016-05-13 2016-05-20 AXIS],
            [2016-05-10 2016-05-13 TMEH-J],
            [2016-05-12 2016-05-20 TMEH-J],
            [2016-05-17 2016-05-20 TMEH-J]
         )
    ) as pt

 

 

 

## 두번째 풀이 : 헤더값을 결과로 만들어 Union 처리 하는 방법.

;with tb
as
(
    SELECT ITEM_CD, SPEC, SO_DT, DLVY_DT, SOLD_TO_PARTY_NM, SO_QTY
    FROM (
        VALUES
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-10', '2016-05-13', 'TMEH-J', 2400 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-12', '2016-05-20', 'TMEH-J', 4800 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-17', '2016-05-20', 'TMEH-J', 10800 ),
            ( '41-P006-IVM', 'GAP-6 IV', '2016-05-13', '2016-05-20', 'AXIS', 2400 )

    ) AS TB ( ITEM_CD, SPEC, SO_DT, DLVY_DT, SOLD_TO_PARTY_NM, SO_QTY )
), src
as
(
    select ITEM_CD, SPEC, SO_DT + ' ' + DLVY_DT +' '+ SOLD_TO_PARTY_NM as HD, SO_QTY
    from tb
), hd1
as
(
    select ITEM_CD, SPEC, SO_DT + ' ' + DLVY_DT +' '+ SOLD_TO_PARTY_NM as HD, SO_DT
    from tb
)
, hd2
as
(
    select ITEM_CD, SPEC, SO_DT + ' ' + DLVY_DT +' '+ SOLD_TO_PARTY_NM as HD, DLVY_DT
    from tb
)
, hd3
as
(
    select ITEM_CD, SPEC, SO_DT + ' ' + DLVY_DT +' '+ SOLD_TO_PARTY_NM as HD, SOLD_TO_PARTY_NM
    from tb
)


 
select *, 1 as odr--ITEM_CD, SPEC, [2016-05-13 2016-05-20 AXIS],[2016-05-10 2016-05-13 TMEH-J],[2016-05-12 2016-05-20 TMEH-J],[2016-05-17 2016-05-20 TMEH-J]
from hd1
pivot
(
     min( SO_DT ) for HD in (
        [2016-05-13 2016-05-20 AXIS],
        [2016-05-10 2016-05-13 TMEH-J],
        [2016-05-12 2016-05-20 TMEH-J],
        [2016-05-17 2016-05-20 TMEH-J]
     )
) as pt
union

select *, 2 as odr--ITEM_CD, SPEC, [2016-05-13 2016-05-20 AXIS],[2016-05-10 2016-05-13 TMEH-J],[2016-05-12 2016-05-20 TMEH-J],[2016-05-17 2016-05-20 TMEH-J]
from hd2
pivot
(
    min( DLVY_DT ) for HD in (
        [2016-05-13 2016-05-20 AXIS],
        [2016-05-10 2016-05-13 TMEH-J],
        [2016-05-12 2016-05-20 TMEH-J],
        [2016-05-17 2016-05-20 TMEH-J]
     )
) as pt
union

select *, 3 as odr--ITEM_CD, SPEC, [2016-05-13 2016-05-20 AXIS],[2016-05-10 2016-05-13 TMEH-J],[2016-05-12 2016-05-20 TMEH-J],[2016-05-17 2016-05-20 TMEH-J]
from hd3
pivot
(
    min( SOLD_TO_PARTY_NM ) for HD in (
        [2016-05-13 2016-05-20 AXIS],
        [2016-05-10 2016-05-13 TMEH-J],
        [2016-05-12 2016-05-20 TMEH-J],
        [2016-05-17 2016-05-20 TMEH-J]
     )
) as pt
union

select ITEM_CD, SPEC,
       convert(varchar,[2016-05-13 2016-05-20 AXIS]),
       convert(varchar,[2016-05-10 2016-05-13 TMEH-J]),
       convert(varchar,[2016-05-12 2016-05-20 TMEH-J]),
       convert(varchar,[2016-05-17 2016-05-20 TMEH-J]),
       9999 as odr
from src
pivot
(
    sum( SO_QTY ) for HD in (
        [2016-05-13 2016-05-20 AXIS],
        [2016-05-10 2016-05-13 TMEH-J],
        [2016-05-12 2016-05-20 TMEH-J],
        [2016-05-17 2016-05-20 TMEH-J]
     )
) as pt
 

order by odr

 

 

 

문제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으로 동작할수 있게 하고 줄여서

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