멀티 PIVOT
출처
https://stackoverflow.com/questions/27707421/sqlserver-multiple-pivot-on-same-columns
여기에 답변으로 달린..
SELECT ID,
NAME,
Max([Raised to Supplier(PLANED)])[Raised to Supplier(PLANED)],
Max([Base Test Date(PLANED)])[Base Test Date(PLANED)],
Max([Washing Approval(PLANED)])[Washing Approval(PLANED)],
Max([Raised to Supplier(ACTUAL)])[Raised to Supplier(ACTUAL)],
Max([Base Test Date(ACTUAL)])[Base Test Date(ACTUAL)],
Max([Washing Approval(ACTUAL)])[Washing Approval(ACTUAL)]
FROM (SELECT 1 ID,'45rpm' NAME,'Raised to Supplier' + '(PLANED)' MSNAME_pl,'Raised to Supplier' + '(ACTUAL)' MSNAME_ac,'2014-12-17' PLANED,'2015-12-17' ACTUAL
UNION ALL
SELECT 1,'45rpm','Base Test Date' + '(PLANED)','Base Test Date' + '(ACTUAL)','2014-12-18','2015-12-18'
UNION ALL
SELECT 1,'45rpm','Washing Approval' + '(PLANED)','Washing Approval' + '(ACTUAL)','2014-12-19','2015-12-19') a
PIVOT ( Max(PLANED)
FOR MSNAME_pl IN ([Raised to Supplier(PLANED)],
[Base Test Date(PLANED)],
[Washing Approval(PLANED)]) ) AS p1
PIVOT ( MAX(ACTUAL)
FOR MSNAME_ac IN ([Raised to Supplier(ACTUAL)],
[Base Test Date(ACTUAL)],
[Washing Approval(ACTUAL)])) p2
GROUP BY ID, NAME
결과
지금은 쓸일은 없는데...
최근 개발할때 써볼까 했다가... 잘 안되어서...
끝나고 찾아보니 실행가능한 샘플이 있다.
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
mssql] 해당일자의 주간, 월간 시작~끝까지 구하기. (0) | 2025.04.17 |
---|---|
SSMS 에러 해결방법!! (0) | 2021.02.16 |
sqler 문제 풀이. (0) | 2017.05.22 |
sqler에 올라온 질문글... (0) | 2016.09.12 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
mssql] 해당일자의 주간, 월간 시작~끝까지 구하기.
일일 점검표 같은 걸 만들어줘야 하는데... 월간으로 보여줄지. 주간으로 보여줘야 할지...
범위를 고려해야 하기 때문에 둘다 구하는 쿼리를 샘플로 만들었다.
주간: 해당 일자가 포함된 주간의 일요일 ~ 토요일까지의 일자를 구한다.
월간: 해당 일자가 포함된 월의 1일 ~ 말일까지를 구한다.
* 예전에 만든 쿼리가 있긴 하네...
* 임시테이블에 넣는거...
* 오류 수정 :: 실제 적용해보니 원하던 결과가 아니었다.
04-13일요일을 설정하고 주간 정보를 보면 월요일 부터 나와야 할게 14일부터 보여져서 수정.( 04-23 )
DECLARE @TODAY DATETIME = '2025-04-13 00:00:00'
--SET @TODAY = DATEADD( MINUTE, -(8*60+30), @TODAY )
-- 일요일부터 시작하면 : DATEADD( DAY, - CASE DATEPART(WEEKDAY, @TODAY) WHEN 1 THEN 7 ELSE DATEPART(WEEKDAY, @TODAY) - 1 END + NUMBER, @TODAY)
-- 월요일부터 시작하면 : DATEADD( DAY, - CASE DATEPART(WEEKDAY, @TODAY) WHEN 1 THEN 7 ELSE DATEPART(WEEKDAY, @TODAY) - 1 END + NUMBER + 1, @TODAY)
-- 해당 날자에 주간
SELECT DATEADD( DAY, - CASE DATEPART(WEEKDAY, @TODAY) WHEN 1 THEN 7 ELSE DATEPART(WEEKDAY, @TODAY) - 1 END + NUMBER + 1, @TODAY)
FROM MASTER..SPT_VALUES
WHERE TYPE = 'P'
AND NUMBER BETWEEN 0 AND 6
-- 해당 날자에 월간
SELECT DATEADD( DAY, (-1 * (DATEPART(DAY, @TODAY) - NUMBER - 1)), @TODAY)
, DATENAME(WEEKDAY, DATEADD( DAY, (-1 * (DATEPART(DAY, @TODAY) - NUMBER - 1)), @TODAY))
FROM MASTER..SPT_VALUES
WHERE TYPE = 'P'
AND NUMBER BETWEEN 0 AND DATEPART( DAY, Eomonth( @TODAY ))-1
찾아보니 이것도 있네...
set datefirst 1 -- 월요일은 1 화요일은 2 수요일은 3 ... 일요일은 7
[출처] [ms-sql] 일주일의 시작일을 월요일로 정하기|작성자 남짱
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
멀티 PIVOT (0) | 2025.05.08 |
---|---|
SSMS 에러 해결방법!! (0) | 2021.02.16 |
sqler 문제 풀이. (0) | 2017.05.22 |
sqler에 올라온 질문글... (0) | 2016.09.12 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
SSMS 에러 해결방법!!
에러 내용 :
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
그리고 그게 다입니다. 이제이 불쾌한 충돌을 피할 수 있습니다.
ps :
새 프로젝트를 시작하면서 기존 노트북이 망가져서 새 노트북에 환경설정을 마쳤었다.
크리스탈 리포트 관련 이슈가 있어서 해결하는 과정에서 ssms를 실행하고 프로시저를 확인하려고
내가 만들어 넣은 오브젝트 탐색기를 가동시켜 프로시저를 찾았는데...
이게 설정 후 처음 열리는 것이라 팝업형태로 떠있길래 드래그 해서 프로그램안으로 밀어넣었는데...
강제종료???
여러번 해봤지만 역시나 에러로 종료되어 내 개발pc에서 확장프로그램 소스를 이용하여 ssms를 열고 동일한 에러가 발생하였다. ssms버젼확인 후 18.5에서 해결되었다는 글을 보고 최신버젼 18.8을 설치하였으나 동일한 증상이 일어났다.
혹시나 하여 14, 16, 17버젼 모두 실행해서 확인해본결과 14빼고 모두 동일하게 강제종료 되었다.
잘 되던게 왜이러나 하고... 고민하던 중에... 내가 만든 것만 그런가? 라는 생각에...
ssms에 원래 있던 창인 "출력" 창을 열어서 드래그해서 붙여보니 ... 동일하게 강제종료 현상이 발생하였다.
다행이 내 프로그램문제는 아니구나 하고 검색... 검색... ....
찾았다. 영어가 안되는게 참 서글픈... 크롬에서 번역기능이 없었으면... 찾았을까 싶다.
머리가 나빠서 쉽지 않은 삶이야...
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
멀티 PIVOT (0) | 2025.05.08 |
---|---|
mssql] 해당일자의 주간, 월간 시작~끝까지 구하기. (0) | 2025.04.17 |
sqler 문제 풀이. (0) | 2017.05.22 |
sqler에 올라온 질문글... (0) | 2016.09.12 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
피봇(pivot)과 언피봇(unpivot) 응용
환경 : 오라클 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 |
집계함수 MIN, MAX에 해당하는 다른 컬럼값은?
환경 : 오라클 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 |
GROUP 콤마구분자로 연결하기
환경 : 오라클 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 |
달력2
환경 : 오라클 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
)
;
'# 7) 데이타베이스 > 오라클' 카테고리의 다른 글
집계함수 MIN, MAX에 해당하는 다른 컬럼값은? (0) | 2019.11.03 |
---|---|
GROUP 콤마구분자로 연결하기 (0) | 2019.11.03 |
달력 1 (0) | 2019.11.03 |
[오라클] 동적쿼리 (0) | 2010.10.24 |
[오라클] 패키지 만드는 구문.. (0) | 2010.10.23 |
달력 1
환경 : 오라클 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'
'# 7) 데이타베이스 > 오라클' 카테고리의 다른 글
GROUP 콤마구분자로 연결하기 (0) | 2019.11.03 |
---|---|
달력2 (0) | 2019.11.03 |
[오라클] 동적쿼리 (0) | 2010.10.24 |
[오라클] 패키지 만드는 구문.. (0) | 2010.10.23 |
[토드9.5] 쿼리 테스트 할때 구문 작성법... (0) | 2010.10.23 |
sqler 문제 풀이.
sqler 질문글..
아래처럼 풀이해봤음.
/*
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
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
mssql] 해당일자의 주간, 월간 시작~끝까지 구하기. (0) | 2025.04.17 |
---|---|
SSMS 에러 해결방법!! (0) | 2021.02.16 |
sqler에 올라온 질문글... (0) | 2016.09.12 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.13 |
sqler에 올라온 질문글...
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
'# 7) 데이타베이스 > Ms-Sql' 카테고리의 다른 글
SSMS 에러 해결방법!! (0) | 2021.02.16 |
---|---|
sqler 문제 풀이. (0) | 2017.05.22 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.20 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.13 |
Sqler에 있는 질문에 대해 풀어봤다. (0) | 2016.05.11 |