Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server总和然后是最大值_Sql_Sql Server_Sum_Max_Ssms - Fatal编程技术网

SQL Server总和然后是最大值

SQL Server总和然后是最大值,sql,sql-server,sum,max,ssms,Sql,Sql Server,Sum,Max,Ssms,如何获得我拥有的总和范围的最大值 电流输出: Size | Format | ColB | Value Large | PCT | Tmp1 | 23.05 Large | PCT | Tmp3 | 109.00 Large | PCT | Tmp50 | 3.22 Large | PCT | Tmp109 | 987.23 Large | PCT | Tmp58 | 455.30 预期产出: Size | Format | Co

如何获得我拥有的总和范围的最大值

电流输出:

Size  |  Format | ColB   | Value
Large |  PCT    | Tmp1   | 23.05
Large |  PCT    | Tmp3   | 109.00
Large |  PCT    | Tmp50  | 3.22
Large |  PCT    | Tmp109 | 987.23
Large |  PCT    | Tmp58  | 455.30
预期产出:

Size  |  Format | ColB   | Value  | Max_Value
Large |  PCT    | Tmp1   | 23.05  | 987.23
Large |  PCT    | Tmp3   | 109.00 | 987.23
Large |  PCT    | Tmp50  | 3.22   | 987.23
Large |  PCT    | Tmp109 | 987.23 | 987.23
Large |  PCT    | Tmp58  | 455.30 | 987.23
如果可能的话,请告诉我。
当前代码如下:

USE DB1

DECLARE @StartDate DATE
DECLARE @EndDate DATE
DECLARE @ColA VARCHAR(10)
DECLARE @ColB VARCHAR(20)
DECLARE @ColC VARCHAR(15)
DECLARE @ColD VARCHAR(15)
DECLARE @ColE VARCHAR(15)
DECLARE @ColF VARCHAR(15)
DECLARE @ColG VARCHAR(15)

BEGIN
SET @StartDate = '01/01/2017'
SET @EndDate = '01/14/2017'
SET @ColA = '%%'
SET @ColB = '%%'
SET @ColC = '%%'
SET @ColD = '%%'
SET @ColE = '%%'
SET @ColF = '%%'
SET @ColG = '%%'
END

SELECT
    'Large' AS [Size]
    ,'PCT' AS [Format]
    ,[ColB]
    ,CAST((SUM([Numerator])/SUM([Denominator]))*100 AS NUMERIC(12,2)) AS [Value]
FROM [Table1] WITH(NOLOCK)
WHERE [Date] BETWEEN @StartDate AND @EndDate
AND [ColA] LIKE @ColA
AND [ColB] LIKE @ColB
AND [ColC] LIKE @ColC
AND [ColD] LIKE @ColD
AND [ColE] LIKE @ColE
AND [ColF] LIKE @ColF
AND [ColG] LIKE @ColG
GROUP BY [ColB]

提前谢谢。

使用您的
总和的子查询
,然后使用
MAX
函数获取此信息

SELECT 'Large' AS [Size], 'PCT' AS [Format], [ColB],
CAST((SUM([Numerator])/SUM([Denominator]))*100 AS NUMERIC(12,2)) AS [Value],
    (SELECT MAX(SUBValue) 
    FROM (SELECT [ColB], CAST((SUM([Numerator])/SUM([Denominator]))*100 AS NUMERIC(12,2)) AS [SUBValue]
         FROM [Table1] WITH(NOLOCK)
         WHERE [Date] BETWEEN @StartDate AND @EndDate
         AND [ColA] LIKE @ColA
         AND [ColB] LIKE @ColB
         AND [ColC] LIKE @ColC
         AND [ColD] LIKE @ColD
         AND [ColE] LIKE @ColE
         AND [ColF] LIKE @ColF
         AND [ColG] LIKE @ColG
         GROUP BY [ColB])) AS Max_Value
FROM [Table1] WITH(NOLOCK)
WHERE [Date] BETWEEN @StartDate AND @EndDate
AND [ColA] LIKE @ColA
AND [ColB] LIKE @ColB
AND [ColC] LIKE @ColC
AND [ColD] LIKE @ColD
AND [ColE] LIKE @ColE
AND [ColF] LIKE @ColF
AND [ColG] LIKE @ColG
GROUP BY [ColB]

您可以使用如下窗口函数:

SELECT
    'Large' AS [Size]
    ,'PCT' AS [Format]
    ,[ColB]
    ,CAST((SUM([Numerator])/SUM([Denominator]))*100 AS NUMERIC(12,2)) AS [Value]
    ,cast(max(sum([Numerator])/sum([Denominator])) over(partition by null)) as numeric(12,2)) *100 as [MaxValue]
FROM [Table1] WITH(NOLOCK)
WHERE [Date] BETWEEN @StartDate AND @EndDate
AND [ColA] LIKE @ColA
AND [ColB] LIKE @ColB
AND [ColC] LIKE @ColC
AND [ColD] LIKE @ColD
AND [ColE] LIKE @ColE
AND [ColF] LIKE @ColF
AND [ColG] LIKE @ColG
GROUP BY [ColB]

我认为它应该适用于您的情况。

在选择列表中添加一个不相关的子查询。这与预期的一样有效。非常感谢。另外一个问题,如果该行的[Value]与[MaxValue]匹配,我如何创建一个新列以返回“Yes”?这只是为了更容易看到,如果不可行,也可以。再次感谢您的帮助。您可以在外部查询中结束此查询,并在那里进行检查:
选择a.*,iif(a.Value=a.MaxValue,'YES','NO')作为匹配项(选择'Large'作为[Size],'PCT'作为[Format],[ColB]…groupby[ColB]),作为一个