﻿
-- 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
