【发布时间】:2019-05-28 03:16:37
【问题描述】:
我想动态计算表格值并从参数中找到最小值和最大值目标
我有以下带有数据的目标表:
Name Quarter Method MethodID GivenTarget Percentage
Json Ray 1 AB 1 153000 0.2
Json Ray 1 BC 2 208000 0.5
Json Ray 1 CD 3 252000 0.8
Json Ray 1 DE 4 450000 0.2
Json Ray 2 AB 1 223000 1.4
Json Ray 2 BC 2 308000 1.8
Json Ray 2 CD 3 352000 1.2
Json Ray 2 DE 4 550000 1.5
Json Ray 3 AB 1 323000 2.8
Json Ray 3 BC 2 408000 2.3
Json Ray 3 CD 3 552000 2.4
Json Ray 3 DE 4 650000 2.9
Json Ray 4 AB 1 423000 2.2
Json Ray 4 BC 2 508000 3.3
Json Ray 4 CD 3 652000 3.5
Json Ray 4 DE 4 750000 3.9
我正在为特定季度(1、2、3、4)传递一个参数AchievedTarget。
如果季度 = 1 和成就目标 = 250000 我想要成就目标介于两者之间的记录
输出应该是这样的:
如果季度 = 1 和成就目标 = 400000 我想要成就目标介于两者之间的记录
输出应该是这样的:
如果季度 = 2 和成就目标 = 400000,我想对目标表中的 GivenTarget 列求和,其中季度 = 1,方法 = 'AB',Method_ID = 1
使用 Quarter= 2 Method = 'AB' Method_ID = 1 以此类推,以添加每个相应的方法和 Method_ID 与季度,并且需要从当前季度中选择百分比值,即在这种情况下为第 2 季度,具有相应的 Method 和 Method_ID
第 2 季度的预期新目标表应如下所示:
现在根据上表我想计算之前计算的 Min_Target 和 Max_Target
Quarter= 2 和 AchievedTarget= 500000 的预期输出应该是:
以下是我正在尝试的代码,它只给了我 Quarter = 1 的输出
--DECLARE Input Parameters
DECLARE @AchievedTarget Money =200000
DECLARE @Name varchar(30)='Json Ray' , @Quarter int =1, @Mothod varchar(10)='AB'
--DECLARE Ouput variable
DECLARE @Min_Target Money, @Max_Target Money, @Min_Percenatge float ,@Max_Percenatge float
--Finding Min_Target
SET @Min_Target=(SELECT TOP 1 [GivenTarget] as Min_Target
FROM [Target]
WHERE [Name] = @Name
AND Quarter = @Quarter
AND Mothod =@Mothod
and [GivenTarget] < @AchievedTarget
order by [GivenTarget] desc)
IF @Min_Target IS Null
SET @Min_Target=(@AchievedTarget)
--Finding Max_Target
SET @Min_Target=(SELECT TOP 1 [GivenTarget] as Min_Target
FROM [Target ]
WHERE [Name] = @Name
AND Quarter = @Quarter
AND Mothod =@Mothod
and [GivenTarget] < @AchievedTarget
order by [GivenTarget] ASC)
IF @Max_Target IS Null
SET @Max_Target=(@AchievedTarget)
--Finding @Min_Percenatge
SET @Min_Percenatge=(SELECT TOP 1 [Percenatge] AS Min_Percenatge
from [Target ]
WHERE [Name] = @Name
AND Quarter = @Quarter
AND Mothod =@Mothod
AND [GivenTarget] in (@Min_Target,@Max_Target))
--Finding @Max_Percenatge
SET @Max_Percenatge=(SELECT TOP 1 [Percenatge] AS Max_Percenatge
from [Target ]
WHERE [Name] = @Name
AND Quarter = @Quarter
AND Mothod =@Mothod
AND [GivenTarget] in (@Min_Target,@Max_Target)
ORDER BY [Percenatge] DESC)
--Display Ouput
SELECT @Name, @Quarter,@Mothod ,@Min_Target, @Max_Target, @Min_Percenatge,@Max_Percenatge
我无法动态计算表值并从参数季度中找到最小和最大目标。
【问题讨论】:
-
如果我们不必从图像中输入您的源数据,这个问题会更容易解决。请以文本格式而不是图像粘贴数据。
-
嗨 TomC,以下是文本中的源表数据 Name Quarter Method MethodID GivenTarget Percentage Json Ray 1 AB 1 153000 0.2 Json Ray 1 BC 2 208000 0.5 Json Ray 1 CD 3 252000 0.8 Json Ray 1 DE 4 450000 0.2 Json Ray 2 AB 1 223000 1.4 Json Ray 2 BC 2 308000 1.8 Json Ray 2 CD 3 352000 1.2 Json Ray 2 DE 4 550000 1.5 Json Ray 3 AB 1 323000 2.8 Json Ray 3 BC 2 408000 2 552000 2.4 Json Ray 3 DE 4 650000 2.9 Json Ray 4 AB 1 423000 2.2 Json Ray 4 BC 2 508000 3.3 Json Ray 4 CD 3 652000 3.5 Json Ray 4 DE 4 750000 3.9
-
CREATE TABLE [dbo].[Target]( [Name] [nvarchar](255) NULL, [Quarter] [float] NULL, [Method] [nvarchar](255) NULL, [MethodID ] [float] NULL, [GivenTarget] [float] NULL, [Percentage] [float] NULL ) ON [PRIMARY] 谢谢
-
感谢@sparta_saggy,我已经编辑了问题以显示您的数据应该去哪里。您可以随时编辑问题以添加额外信息。
-
根据您的测试数据,每个方法每个季度只有一个条目。所以你只会看一行。
标签: sql sql-server database tsql