-- FN取得選定講師編號 CREATE FUNCTION FN取得選定講師編號 ( @課程企劃編號 AS INT, @課程序號 AS INT ) RETURNS INT AS BEGIN DECLARE @RESULT INT DECLARE @COUNT INT DECLARE @講師編號 INT SELECT @COUNT=COUNT(1) FROM 訓練課程內容 WHERE 訓練課程企劃編號=@課程企劃編號 AND 課程序號=@課程序號 IF @COUNT = 0 BEGIN RETURN 0 END ELSE BEGIN SELECT TOP 1 @講師編號 = 講師編號 FROM 講師異動 WHERE 課程企劃編號 = @課程企劃編號 AND 課程序號 = @課程序號 ORDER BY 異動次數 DESC IF @講師編號 IS NOT NULL BEGIN RETURN @講師編號 END ELSE BEGIN DECLARE @講師A INT DECLARE @講師B INT DECLARE @講師C INT DECLARE @分數A INT DECLARE @分數B INT DECLARE @分數C INT SELECT @講師A = ISNULL(講師編號_A, 0), @講師B = ISNULL(講師編號_B, 0), @講師C = ISNULL(講師編號_C, 0), @分數A = ISNULL(合計_A, 0), @分數B = ISNULL(合計_B, 0), @分數C = ISNULL(合計_C, 0) FROM 講師遴選 WHERE 課程企劃編號 = @課程企劃編號 AND 課程序號 = @課程序號 IF (@分數A > @分數B AND @分數A > @分數C) SET @講師編號 = @講師A ELSE IF (@分數B > @分數A AND @分數B > @分數C) SET @講師編號 = @講師B ELSE SET @講師編號 = @講師C END END RETURN @講師編號 END -- FN取得選定場地編號 CREATE FUNCTION FN取得選定場地編號 ( @課程企劃編號 AS INT ) RETURNS INT AS BEGIN DECLARE @RESULT INT DECLARE @COUNT INT DECLARE @場地編號 INT SELECT @COUNT=COUNT(1) FROM 訓練課程企劃 WHERE 編號=@課程企劃編號 IF @COUNT = 0 BEGIN RETURN 0 END ELSE BEGIN SELECT TOP 1 @場地編號 = 場地編號 FROM 場地異動 WHERE 課程企劃編號 = @課程企劃編號 ORDER BY 異動次數 DESC IF @場地編號 IS NOT NULL BEGIN RETURN @場地編號 END ELSE BEGIN DECLARE @場地A INT DECLARE @場地B INT DECLARE @場地C INT DECLARE @分數A INT DECLARE @分數B INT DECLARE @分數C INT SELECT @場地A = ISNULL(場地編號_A, 0), @場地B = ISNULL(場地編號_B, 0), @場地C = ISNULL(場地編號_C, 0), @分數A = ISNULL(合計_A, 0), @分數B = ISNULL(合計_B, 0), @分數C = ISNULL(合計_C, 0) FROM 場地遴選 WHERE 課程企劃編號 = @課程企劃編號 IF (@分數A > @分數B AND @分數A > @分數C) SET @場地編號 = @場地A ELSE IF (@分數B > @分數A AND @分數B > @分數C) SET @場地編號 = @場地B ELSE SET @場地編號 = @場地C END END RETURN @場地編號 END -- FN取得選定講師名稱 CREATE FUNCTION FN取得選定講師名稱 ( @課程企劃編號 AS INT, @課程序號 AS INT ) RETURNS NVARCHAR(200) AS BEGIN DECLARE @講師編號 INT DECLARE @講師名稱 NVARCHAR(200) -- 先檢查 訓練課程內容 是否存在 IF NOT EXISTS (SELECT 1 FROM 訓練課程內容 WHERE 訓練課程企劃編號=@課程企劃編號 AND 課程序號=@課程序號) RETURN NULL -- Step 1: 先查 講師異動 (最後異動) SELECT TOP 1 @講師編號 = ISNULL(講師編號, 0), @講師名稱 = 講師姓名 FROM 講師異動 WHERE 課程企劃編號 = @課程企劃編號 AND 課程序號 = @課程序號 ORDER BY 異動次數 DESC IF @講師編號 > 0 BEGIN SELECT @講師名稱 = 姓名 FROM 講師 WHERE 編號 = @講師編號 RETURN @講師名稱 END ELSE IF @講師名稱 IS NOT NULL AND @講師名稱 <> '' BEGIN RETURN @講師名稱 END -- Step 2: 查 講師遴選 DECLARE @講師A INT, @講師B INT, @講師C INT DECLARE @姓名A NVARCHAR(200), @姓名B NVARCHAR(200), @姓名C NVARCHAR(200) DECLARE @分數A INT, @分數B INT, @分數C INT DECLARE @選定 INT SELECT @講師A = ISNULL(講師編號_A, 0), @講師B = ISNULL(講師編號_B, 0), @講師C = ISNULL(講師編號_C, 0), @姓名A = 講師姓名_A, @姓名B = 講師姓名_B, @姓名C = 講師姓名_C, @分數A = ISNULL(合計_A, 0), @分數B = ISNULL(合計_B, 0), @分數C = ISNULL(合計_C, 0), @選定 = ISNULL(選定講師, 0) FROM 講師遴選 WHERE 課程企劃編號 = @課程企劃編號 AND 課程序號 = @課程序號 IF @@ROWCOUNT = 0 RETURN NULL IF @選定 = 1 SELECT @講師編號 = @講師A, @講師名稱 = @姓名A ELSE IF @選定 = 2 SELECT @講師編號 = @講師B, @講師名稱 = @姓名B ELSE IF @選定 = 3 SELECT @講師編號 = @講師C, @講師名稱 = @姓名C ELSE IF (@分數A >= @分數B AND @分數A >= @分數C) SELECT @講師編號 = @講師A, @講師名稱 = @姓名A ELSE IF (@分數B >= @分數A AND @分數B >= @分數C) SELECT @講師編號 = @講師B, @講師名稱 = @姓名B ELSE SELECT @講師編號 = @講師C, @講師名稱 = @姓名C IF @講師編號 > 0 SELECT @講師名稱 = 姓名 FROM 講師 WHERE 編號 = @講師編號 RETURN @講師名稱 END -- FN取得選定場地名稱 CREATE FUNCTION FN取得選定場地名稱 ( @課程企劃編號 AS INT ) RETURNS NVARCHAR(200) AS BEGIN DECLARE @場地編號 INT DECLARE @場地名稱 NVARCHAR(200) -- 先檢查 訓練課程企劃 是否存在 IF NOT EXISTS (SELECT 1 FROM 訓練課程企劃 WHERE 編號=@課程企劃編號) RETURN NULL -- Step 1: 先查 場地異動 (最後異動) SELECT TOP 1 @場地編號 = ISNULL(場地編號, 0), @場地名稱 = 場地名稱 FROM 場地異動 WHERE 課程企劃編號 = @課程企劃編號 ORDER BY 異動次數 DESC IF @場地編號 > 0 BEGIN SELECT @場地名稱 = 場地名稱 FROM 場地 WHERE 編號 = @場地編號 RETURN @場地名稱 END ELSE IF @場地名稱 IS NOT NULL AND @場地名稱 <> '' BEGIN RETURN @場地名稱 END -- Step 2: 查 場地遴選 DECLARE @場地A INT, @場地B INT, @場地C INT DECLARE @名稱A NVARCHAR(200), @名稱B NVARCHAR(200), @名稱C NVARCHAR(200) DECLARE @分數A INT, @分數B INT, @分數C INT DECLARE @選定 INT SELECT @場地A = ISNULL(場地編號_A, 0), @場地B = ISNULL(場地編號_B, 0), @場地C = ISNULL(場地編號_C, 0), @名稱A = 場地名稱_A, @名稱B = 場地名稱_B, @名稱C = 場地名稱_C, @分數A = ISNULL(合計_A, 0), @分數B = ISNULL(合計_B, 0), @分數C = ISNULL(合計_C, 0), @選定 = ISNULL(選定場地, 0) FROM 場地遴選 WHERE 課程企劃編號 = @課程企劃編號 IF @@ROWCOUNT = 0 RETURN NULL IF @選定 = 1 SELECT @場地編號 = @場地A, @場地名稱 = @名稱A ELSE IF @選定 = 2 SELECT @場地編號 = @場地B, @場地名稱 = @名稱B ELSE IF @選定 = 3 SELECT @場地編號 = @場地C, @場地名稱 = @名稱C ELSE IF (@分數A >= @分數B AND @分數A >= @分數C) SELECT @場地編號 = @場地A, @場地名稱 = @名稱A ELSE IF (@分數B >= @分數A AND @分數B >= @分數C) SELECT @場地編號 = @場地B, @場地名稱 = @名稱B ELSE SELECT @場地編號 = @場地C, @場地名稱 = @名稱C IF @場地編號 > 0 SELECT @場地名稱 = 場地名稱 FROM 場地 WHERE 編號 = @場地編號 RETURN @場地名稱 END