使用存储过程时,如何将声明的值传递给临时列名称的别名?

在不同站点上计算费率时,我们总是使用不同的位置名称等。因此,我想创建一个存储过程,这样当我在某些站点上运行存储过程时,便可以声明这些值,而不必一直在脚本中进行更改。我已经成功创建了过程并声明了搜索值,但是似乎无法将此“声明的值”传递给要创建的临时表的列名的别名。

DeclARE @TimePeriod as INT = '15'
Declare @LocID1 as varchar(max) = 'IN02'
Declare @LocID2 as varchar(max) = 'IN03'
Declare @LocID3 as varchar(max) = 'PL01'
Declare @GroupLocID1 as varchar(max) = 'IN%'
Declare @GroupLocID2 as varchar(max) = 'PL%'
Declare @GroupLocID3 as varchar(max) = 'IN9%'

--Create Procedure ThroughputTest 
--@TimePeriod INT,--@LocID1 varchar(max),--@LocID2 varchar(max),--@LocID3 varchar(max),--@GroupLocID1 varchar(max),--@GroupLocID2 varchar(max),--@GroupLocID3 varchar(max) 

--AS

SELECT temp.starttime,temp.endtime,cast(SUM(CASE WHEN lc.Loc1 = @LocID1 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 = @LocID1 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 = @LocID1 THEN 1.00 ELSE 0.00 END) /@TimePeriod as decimal(18,2))
        AS LocID1,cast(SUM(CASE WHEN lc.Loc1 = @LocID2 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 = @LocID2 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 = @LocID2 THEN 1.00 ELSE 0.00 END) /@TimePeriod as decimal(18,2))
        AS LocID2,cast(SUM(CASE WHEN lc.Loc1 = @LocID3 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 = @LocID3 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 = @LocID3 THEN 1.00 ELSE 0.00 END) /@TimePeriod as decimal(18,2))
        AS LocID3,cast(SUM(CASE WHEN lc.Loc1 LIKE @GroupLocID1 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 LIKE @GroupLocID1 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 LIKE @GroupLocID1 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
        AS GroupLocID1,cast(SUM(CASE WHEN lc.Loc1 LIKE @GroupLocID2 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 LIKE @GroupLocID2 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 LIKE @GroupLocID2 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
        AS GroupLocID2,cast(SUM(CASE WHEN lc.Loc1 LIKE @GroupLocID3 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc2 LIKE @GroupLocID3 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
    + cast(SUM(CASE WHEN lc.Loc3 LIKE @GroupLocID3 THEN 1.00 ELSE 0.00 END)/@TimePeriod as decimal(18,2))
        AS GroupLocID3
    FROM (
        SELECT CAST(FORMAT(time_orig,'yyyy-MM-dd HH:mm:00') AS DATETIME) AS starttime,CAST(FORMAT(DATEADD(MINUTE,@TimePeriod,time_orig),'yyyy-MM-dd HH:mm:00') AS DATETIME) AS endtime
        FROM dbo.ThroughPut
        WHERE time_orig  <= getdate()-(1/24/4)
        GROUP BY
            CAST(FORMAT(time_orig,'yyyy-MM-dd HH:mm:00') AS DATETIME),'yyyy-MM-dd HH:mm:00') AS DATETIME)
    ) temp
    INNER JOIN dbo.Throughput lc ON lc.Time_Orig BETWEEN temp.starttime AND temp.endtime
GROUP BY starttime,endtime
ORDER BY starttime,endtime

--Exec ThroughputTest 
--@TimePeriod = '15',--@LocID1 = 'IN02',--@LocID2 = 'IN03',--@LocID3 = 'PL01',--@GroupLocID1 = 'IN%',--@GroupLocID2 = 'PL%',--@GroupLocID3 = 'IN9%'

完成后,我将着眼于使代码循环,因为要计算的位置可以在1到X的任意位置,但是当我到达该位置时,它将找出该部分。

xiakaipkq 回答:使用存储过程时,如何将声明的值传递给临时列名称的别名?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3137611.html

大家都在问