[SQL]依某個值將資料分成2份

[SQL]依某個值將資料分成2份

問題

  • 資料準備

--資料準備
DECLARE @EMPLOYEE TABLE
(
ID INT IDENTITY(1,1) 
, EMP_ID VARCHAR(32)
, EMP_NAME NVARCHAR(32)
, BIRTHDAY DATETIME
, CODE_ID VARCHAR(5)
)

INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0001', '亂馬客', '1980/06/22', '005')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0002', '亂馬1/2', '1975/01/10', '005')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0003', '亂停車', '1981/12/25', '001')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0004', '亂開車', '1970/05/17', '002')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0005', '亂來', '1972/07/02', '003')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0006', '亂開玩笑', '1972/06/02', '005')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0007', '亂睡覺', '1972/07/01', '006')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0008', '亂打屁', '1972/08/01', '007')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0009', '打死釘', '1979/01/25', '005')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0010', '打不死', '1979/01/29', '008')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0011', '打打打', '1979/11/29', '010')
INSERT INTO @EMPLOYEE(EMP_ID, EMP_NAME, BIRTHDAY, CODE_ID) VALUES('0012', '郭小玉', '1976/2/29', '005')
--要區005及非005的
DECLARE @SPLIT_CODE VARCHAR(5)  --要2分的CODE_ID,目前設定為005
SET @SPLIT_CODE = '005'
  • 說明

我們有個@EMPLOYEE的資料表,我們設定要區分資料的變數@SPLIT_CODE值為005,輸入值變數為@CODE。
當@CODE = @SPLIT_CODE時,就要把@EMPLOYEE中CODE_ID值為@SPLIT_CODE的資料找出來;當@CODE <> @SPLIT_CODE時,就要把@EMPLOYEE中CODE_ID值不為@SPLIT_CODE的資料找出來。

image

image

練習

  • 使用IF ELSE

--使用IF ELSE
IF @CODE = @SPLIT_CODE
BEGIN
    SELECT *
    FROM @EMPLOYEE
    WHERE CODE_ID = @SPLIT_CODE
END
ELSE
BEGIN
    SELECT *
    FROM @EMPLOYEE
    WHERE CODE_ID <> @SPLIT_CODE
END
  • 使用CASE WHEN + SUBQUERY

SELECT * FROM @EMPLOYEE A
WHERE A.CODE_ID IN (
    SELECT CASE WHEN @CODE = @SPLIT_CODE THEN @SPLIT_CODE 
                ELSE CASE CODE_ID WHEN @SPLIT_CODE THEN '' ELSE CODE_ID END 
           END AS IN_CODE_ID    FROM @EMPLOYEE
)
  • 使用CASE WHEN 在WHERE直接JOIN

SELECT * FROM @EMPLOYEE A
WHERE A.CODE_ID = CASE WHEN @CODE = @SPLIT_CODE THEN @SPLIT_CODE 
                        ELSE CASE CODE_ID WHEN @SPLIT_CODE THEN '' ELSE CODE_ID END 
                    END

範例

依某個值將資料分成2份.rar

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^