[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的資料找出來。
練習
使用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
範例
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^