달력

72017  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'2017/07'에 해당되는 글 3건

  1. 2017.07.24 MSSQL SPLIT 구현
  2. 2017.07.24 MSSQL 중복 데이터 삭제
  3. 2017.07.05 MSSQL PIOVT

MSSQL SPLIT 구현

DBMS/MSSQL 2017. 7. 24. 20:34

/*

SELECT * FROM [dbo].[FN_SPLIT] ('감기,콧물,어지러움,콧물기침,,가래,몸살',',')

*/

CREATE FUNCTION [dbo].[FN_SPLIT]

(

    @PARAM VARCHAR(MAX) -- 대상문자열

    , @DIV VARCHAR(1) -- 특정구분자

)

RETURNS

@RESULT TABLE

(

    [VALUE] VARCHAR(MAX)

    , [ORDER] INT

)

AS

 

BEGIN

 

 

    DECLARE @INDEX INT

    DECLARE @POS INT

    DECLARE @ORDER INT

    DECLARE @TEMP VARCHAR(MAX)

 

 

 

    SET @INDEX = 1

    SET @POS = 1

    SET @ORDER = 1

 

 

 

    WHILE @POS > 0

    BEGIN

        SET @POS = CHARINDEX(@DIV, @PARAM, @INDEX)

 

 

 

        IF @POS = 0

        BEGIN

            SET @TEMP = RIGHT(@PARAM, LEN(@PARAM) - @INDEX + 1)

        END

        ELSE

        BEGIN

            SET @TEMP = SUBSTRING(@PARAM, @INDEX, @POS - @INDEX)

        END

 

 

 

        IF LEN(@TEMP) > 0

        BEGIN

            SET @TEMP = RTRIM(LTRIM(@TEMP))

            INSERT INTO @RESULT VALUES (@TEMP, @ORDER)

        END

 

 

 

       SET @INDEX = @POS + 1

       SET @ORDER = @ORDER + 1

 

 

    END

 

RETURN

END

 

 

 

--실행결과--

SELECT * FROM [dbo].[FN_SPLIT] ('감기,콧물,어지러움,콧물기침,,가래,몸살',',')



출처: http://mdj1234.tistory.com/38 [짬타이거 화이팅!]

'DBMS > MSSQL' 카테고리의 다른 글

MSSQL 중복 데이터 삭제  (0) 2017.07.24
MSSQL PIOVT  (0) 2017.07.05
MSSQL 날짜 , 요일로 변환하기  (0) 2017.06.15
MSSQL MERGE / IF NOT EXISTS 문 사용법  (0) 2017.06.07
MSSQL 금액에 콤마표시하기  (0) 2017.05.25
Posted by 한설림
|

실제 작업시에는 대부분 unique index를 걸거나, primary key 를 걸어 놓아 그런 일이 벌어지지 않지만, 벌크로 데이터를 작업하거나 할 경우, 중복된 데이터를 보거나, 제거하고 싶을 때가 있습니다.

단순히 중복 카운트를 조회 하고 싶을 경우엔, 다음과 같이 grouping 하고 count를 세면 됩니다만,

-- 중복 카운트
SELECT some_id, COUNT(*)
  FROM tbl_some_table
 GROUP BY some_id
 HAVING COUNT(*) > 1;

-- 여러 컬럼의 중복 카운트
SELECT some_id, some_nm, some_description, COUNT(*)
  FROM tbl_some_table
 GROUP BY some_id, some_nm, some_description
 HAVING COUNT(*) > 1;

중복된 데이터 중, 첫번째(또는 마지막) 하나만 빼고 나머지를 조회한다거나, 삭제하고 싶을 때가 있습니다. 그러한 경우 다음과 같은 inline view 로 처리할 수 있습니다. (WITH 를 사용해도 되나, 하위 버전의 SQL 일 경우에는 WITH 구문이 먹지 않죠. 응? 하위 버전은 ROW_NUMBER 가 안 먹겠네요. 아이고 배야. - 하위 버전도 inline view 를 여럿 쓰면 되긴 합니다만.)

-- 중복 데이터를 알고 싶다.
SELECT *
  FROM (
          SELECT some_id
               , dup_idx = ROW_NUMBER() OVER (
                           PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
       ) tb_dup
 WHERE tb_dup.dup_idx > 1;

-- 중복 데이터 기준으로 중복된 데이터를 다 조회하고 싶다.
SELECT t.*
  FROM (
          SELECT some_id
               , dup_idx = ROW_NUMBER() OVER (
                           PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table (NOLOCK)
       ) tb_dup INNER JOIN tbl_some_table t (NOLOCK)
                        ON t.some_id = tb_dup.some_id
 WHERE tb_dup.dup_idx > 1;

-- 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
  FROM (
          SELECT some_id
               , dup_idx = ROW_NUMBER() OVER (
                           PARTITION BY some_id ORDER BY some_id )
            FROM tbl_some_table
       ) tb_dup
 WHERE tb_dup.dup_idx > 1;

-- 여러 컬럼일 경우? 중복 데이터를 지우고 싶다!!!
DELETE tb_dup
  FROM (
          SELECT some_id, some_nm, some_description
               , dup_idx = ROW_NUMBER() OVER (
                           PARTITION BY some_id, some_nm, some_description
                           ORDER BY some_id, some_nm, some_description )
            FROM tbl_some_table
       ) tb_dup
 WHERE tb_dup.dup_idx > 1;

이것 또한 그냥 메모입니다. 하하.



출처: http://withsoju.tistory.com/686 [읽든지 말든지]

'DBMS > MSSQL' 카테고리의 다른 글

MSSQL SPLIT 구현  (0) 2017.07.24
MSSQL PIOVT  (0) 2017.07.05
MSSQL 날짜 , 요일로 변환하기  (0) 2017.06.15
MSSQL MERGE / IF NOT EXISTS 문 사용법  (0) 2017.06.07
MSSQL 금액에 콤마표시하기  (0) 2017.05.25
Posted by 한설림
|

MSSQL PIOVT

DBMS/MSSQL 2017. 7. 5. 16:07
/* 샘플6 PIVOT / UNPIVOT 연산자 PIVOT ( 집계함수(열) FOR 새로운 열로 변경할 열이름 IN (열 목록) AS 피벗이름 ) */ CREATE TABLE ZSAMPLE6 ( UNAME NCHAR(3), SEASON NCHAR(2), AMOUNT INT ); INSERT INTO ZSAMPLE6 VALUES ('김길동', '겨울', 10) ,('이길동', '봄', 3) ,('홍길동', '겨울', 4) ,('황길동', '가을', 16) ,('구길동', '가을', 20) ,('박길동', '여름', 67) ; SELECT * FROM ZSAMPLE6 ORDER BY SEASON, UNAME; SELECT * FROM ZSAMPLE6 PIVOT ( SUM(AMOUNT) FOR SEASON IN ([], [어름], [가을], [겨울]) ) AS RESULT_PIVOT ;
UNAME
SEASON
AMOUNT
구길동
가을
20
황길동
가을
16
김길동
겨울
10
홍길동
겨울
4
이길동
봄 
3
박길동
여름
67
UNAME
여름
가을
겨울
구길동
NULL
NULL
20
NULL
김길동
NULL
NULL
NULL
10
박길동
NULL
NULL
NULL
NULL
이길동
3
NULL
NULL
NULL
홍길동
NULL
NULL
NULL
4
황길동
NULL
NULL
16
NULL


'DBMS > MSSQL' 카테고리의 다른 글

MSSQL SPLIT 구현  (0) 2017.07.24
MSSQL 중복 데이터 삭제  (0) 2017.07.24
MSSQL 날짜 , 요일로 변환하기  (0) 2017.06.15
MSSQL MERGE / IF NOT EXISTS 문 사용법  (0) 2017.06.07
MSSQL 금액에 콤마표시하기  (0) 2017.05.25
Posted by 한설림
|