반응형

테이블 수정 후 저장했을 경우 오류 메시윛

위처럼 오류 메시지가 뜰경우 취소 버튼 클릭 후 도구 -> 옵션 선택

메뉴 -> 도구 -> 옵션
디자이너 -> 테이블 및 데이터베이스... -> 테이블 다시 만들어야 옵션 체크 해제

위처럼 테이블 및 데이터베이스...의 테이블 옵션에 들어와서 테이블을 다시 만들어야 하는 변경 내용 저장 안 함을 체크 해제 한 후 확인 버튼 클릭하고 다시 저장을 해보면 잘 된다.

반응형
로그 이미지

우주의빛

자료를 공유하고 좋은자료 추천 하는 곳입니다.

,
반응형


DBCC CHECKIDENT(테이블명, reseed, 1)


설명 : 테이블명의 Identity를 1로 초기화한다.

반응형
로그 이미지

우주의빛

자료를 공유하고 좋은자료 추천 하는 곳입니다.

,

MSSQL Pivot

Lecture/MS-SQL 2018. 12. 28. 09:18
반응형

Pivot은 네이버 한영사전에 검색을 해보니...

네이버 한영사전 검색결과

위 같은 검색결과가 있네요...

중심이라는 단어가 맞는것 같긴 한데..

전 MSSQL에서 Pivot은 그냥 세로데이터를 가로데이터로 변환할 때 사용합니다.

예를 들어 일자별로 물건 판 세로의 데이터를 가로로 변환하는것이지요....

글로 표현하자니 차암.. 어렵네요...

데이터 테이블 생성

생성된 데이터 결과물

위 처럼 1일에 몇개 ~ 10일에 몇개.. 이 데이터를 가로로 변환할 겁니다.

PIVOT사용한 소스

PIVOT사용 후 결과물

1. 가로로 놓을 이름으로 select로 묶어 주신다음에 JOIN하듯이 PIVOT을 해주시면 됩니다.

PIVOT에서 SUM을 해도 되고 COUNT를 해도 되지만 보통은 정렬 안된 데이터를 합쳐서 하기 때문에 SUM을 사용했구요.

2. FOR 다음에 DAY는 어떤 기준으로 묶을 것이냐.. 즉 컬럼명을 적어주시면 됩니다. 일자별로 묶기 때문에 DAY를 사용했습니다.

3. IN() 안에는 꼭 select로 묶을 당시의 컬럼명들을 다 적어주셔야 합니다.

근데 제가 데이터는 10일까지 해놓고 11일을 데이터를 불러온 이유는 보통 데이터라는게 꼭 있으라는 법이 없기 때문에 NULL로도 표현된다는 것을 보여주기 위함입니다. NULL 참 보기 싫어지네요.. 없애보겠습니다.

PIVOT사용한 소스2

PIVOT사용 후 결과물2

위처럼 select로 묶어주실 때 ISNULL() 함수를 써주시면 됩니다. 있는지 없는지 판단해서 없는걸 빼고 하게 되면 뭔가 더 보기 싫어질 것 같기도 하고.. 그래서 없는건 노출되되 0으로 표현한것이지요.


반응형
로그 이미지

우주의빛

자료를 공유하고 좋은자료 추천 하는 곳입니다.

,
반응형

WITH TABLE_A (NAME) AS (

SELECT '1'

UNION ALL

SELECT '2'

UNION ALL

SELECT '3'

UNION ALL

SELECT '4'

UNION ALL

SELECT '5'

)

SELECT *

FROM (

SELECT STUFF(

(

SELECT ',' + NAME FROM TEST_TABLE FOR XML PATH('')

), 1, 1, ''

) AS RESULT

FROM TEST_TABLE

) LIST

GROUP BY RESULT

일단 위의 소스는 풀소스입니다.

WITH TEST_TABLE만 만들고 SELECT * FROM TEST_TABLE해보면

1단계

이제 이것을 가지고 STUFF FOR XML로 변환을 하게 되면

2단계

위처럼 2단계가 되는데요... 왜 5개가 똑같이 나오냐하면... 원래 5개의 Row를 가지고 있었기 때문입니다.

그래서 1개로 만들기 위해서 방법은 매우 많습니다.

TOP 1을 사용하는 경우, SELECT로 묶고 GROUP BY 사용하는 경우, ROW NUMBER PARTITION을 사용하는 경우

다만 제가 SELECT로 묶고 GROUP BY를 사용 한 이유는

만약 여러개의 데이터들을 묶는데 경우가 여러개가 있다면...

TOP1보다는 SELECT로 묶고 GROUP BY를 사용하는것이 좋습니다.

ROW NUMBER PARTITION 방법도 좋지만... 그냥 사용했습니다.ㅎㅎ

3단계

결과는 3단계처럼 1개가 나오죠.ㅎ


반응형
로그 이미지

우주의빛

자료를 공유하고 좋은자료 추천 하는 곳입니다.

,
반응형

가끔 테이블의 전체 Row수를 가져와야 할 경우 어떤것이 더 좋은지를 설명하겠습니다.

제가 처음에 MS-SQL을 사용할 때 "select count(*) from table명" 이렇게 사용했습니다.

한 몇천개 데이터가 있는 곳에서는 전혀 문제가 안됬죠...

근데 데이터가 쌓이다 보니.. 문제가 발생

count(*) -> count(0)으로 하면 좋습니다.

*라고 하는 건 모든것을 의미합니다. 테이블의 모든부분을 보기 때문에 아무리 컴퓨터라도 시간이 걸릴 수밖에 없죠 0이라고 하는건 첫번째 즉 첫번째 열만 보게 되기 때문에... 모든걸 보는것보다는 빨라지죠...

근데.... 데이터가 더더더 많이 쌓이게 된다면???

요즘은 빅데이터다 보니...

테이블에 5천만건이상의 데이터를 넣어봤습니다.ㅎㅎ

select count(0) from tb_test -> 총 시간이 4분 이상 걸렸죠...

이러면... 나라도 그냥 홈페이지 끄고 다른곳으로 갈 것 같습니다...

커피 한잔을 마실 수 있는 시간이니까요..

SELECT DISTINCT MAX(A.rows)

FROM SYSINDEXES AS A

INNER JOIN SYSOBJECTS AS B ON A.id = B.id

WHERE B.type = 'U' and B.name = 'tb_test'

위와 같이 쿼리를 만들어서 실행한결과...... 0초...

5천만건 0초!!!!ㅎㅎㅎㅎㅎ

데이터는 모두 날린 상태라 스크린샷은 없지만...

정말 유용할 것 같은 쿼리입니다.

반응형
로그 이미지

우주의빛

자료를 공유하고 좋은자료 추천 하는 곳입니다.

,