標籤:
USE [PatPD1]
GO
/****** Object: UserDefinedFunction [dbo].[fun_GetConditionInner] Script Date: 2015/5/9 9:03:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[fun_GetConditionInner] (@Product varchar(20))
returns varchar(8000)
AS
begin
declare @ReturnValue varchar(8000)=‘‘--用於拼接傳回值
declare @Status varchar(8000)--用於儲存狀態值
declare @Type nvarchar(20)--EQPtype
declare @TempType nvarchar(20)--EQPtype的臨時變數用於比較
declare @temp table(
Status nvarchar(20),
Type nvarchar(20)
)
-- declare @Product nvarchar(20)--EQPtype -- 測試放開
-- set @Product=‘8701BA‘
-- set @Product=‘8725AA-0030A‘
insert into @temp select b.Status,a.Type from [dbo].[MtfSetting] a join [dbo].[MtfDetailSetting] b on a.Id=b.Id and a.Product [email protected]
--申明遊標 為EquipmentID,FixQty
declare MTF_Cursor CURSOR FOR select Status,Type from @temp
--開啟遊標
open MTF_Cursor
fetch next from MTF_Cursor into @Status,@Type --將遊標向下移1行,擷取的資料放入之前定義的變數@Status,@JoinCalculate中
while @@FETCH_STATUS = 0 --返回 FETCH 執行語句時遊標的狀態(1:fetch擷取資料成功 -1:fetch語句失敗或此行不在結果集中 -2:被提取的行不存在)
begin
if(@[email protected])--動態拼接投入數
begin
set @ReturnValue+=‘
sum(CASE WHEN EQPTYPE=‘‘‘+RTrim(@TempType)+‘‘‘ THEN QUANTITY ELSE 0 END) qty_TOTAL_‘+Replace(@TempType,‘ ‘,‘‘)+‘,‘
end
set @ReturnValue+=‘
sum(case when a.STATUS=‘‘‘+RTrim(@Status)+‘‘‘‘--拼接條件頭部
if((select count(*) from [dbo].[MtfSetting]where [email protected])>1 )--屬於多種type的組合方式,多拼接一個 a.EQPTYPE 的條件
begin
set @ReturnValue+=‘ and a.EQPTYPE=‘‘‘+RTrim(@Type)+‘‘‘‘
end
set @ReturnValue+=‘ then QUANTITY else 0 end) qty_‘+RTrim(@Status)+‘_‘+Replace(@Type,‘ ‘,‘‘)+‘,‘--拼接條件尾部
set @[email protected]賦值給臨時儲存變數
fetch next from MTF_Cursor into @Status,@Type --將遊標向下移1行
end
close MTF_Cursor--關閉遊標
deallocate MTF_Cursor--釋放遊標
if((select count(*) from [dbo].[MtfSetting]where [email protected])>1 )--屬於多種type的組合方式
begin
set @ReturnValue+=‘
sum(CASE WHEN EQPTYPE=‘‘‘+RTrim(@TempType)+‘‘‘ THEN QUANTITY ELSE 0 END) qty_TOTAL_‘+Replace(@TempType,‘ ‘,‘‘)
end
else
begin
set @ReturnValue+=‘
sum(QUANTITY) qty_TOTAL_‘+Replace(@TempType,‘ ‘,‘‘)
end
--print @ReturnValue
return @ReturnValue
end
sqlServer遊標的使用