在group by子句中选择前1列的值?

时间:2019-08-28 13:02:43

标签: sql sql-server group-by distinct

我要联接两个表,并且我的查询包含group by子句。我想要在结果中显示联接表中的一列,但我不希望它成为分组依据的一部分,因为列值的值不同。我只想显示该列的任何最高价值。

我尝试使用Distinct和Top 1以及其他功能,但对我没有用。

sudo rabbitmqctl set_permissions -p / user ".*" ".*" ".*"

请注意,我正在使用SELECT t1.Code, t2.Details, t2.FineDate ,Sum(t1.Amount) from Emp_Actions t1 INNER JOIN Emp_Fines ON t1.Code = t2.Code where (t1.Code = "MYParameter" or @MyParameter = "" ) group by t1.Code,t2.Details,t2.FineDate ,并且代码是特定的或全部的。我的实际查询过大,我只是制作了一个样本来阐述我的问题。我需要StoredProcedure FineDate,但我不希望它显示在分组依据中。

3 个答案:

答案 0 :(得分:1)

仅获取一个值的一种方法是在SELECT语句中使用MAX(col)或MIN(col),其中col是您不想分组的列。一个优点是您获得了一些一致的值(第一个或最后一个)。

从Emp_Actions t1中选择t1.Code,t2.Details,t2.FineDate, MAX(col)my_col ,Sum(t1.Amount)

此外,如果您要这样做,还可以使用更高级的分析窗口函数(例如,first_value),以便更好地控制选择哪个值,也取决于其他列值。

https://docs.microsoft.com/en-us/sql/t-sql/functions/analytic-functions-transact-sql?view=sql-server-2017

答案 1 :(得分:0)

您可以使用use子查询获得所需结果。

我给你一个示例代码:

Select
t1.Code, t2.Details, t2.FineDate,Sum(t1.Amount) 
,(select top 1 a.ColA from Emp_Fines a where a.Code = t1.Code order by ColOfSort Asc/Desc) as RequiredColumn
from Emp_Actions t1 
INNER JOIN Emp_Fines t2 ON  t1.Code =  t2.Code 
where (t1.Code = "MYParameter" or @MyParameter = "" )
group by t1.Code,t2.Details,t2.FineDate

其中RequiredColumn是您想要在结果中但不想在分组依据中使用的列

答案 2 :(得分:0)

使用MIN()MAX()

select t1.Code, t2.Details, t2.FineDate, Sum(t1.Amount),
       max(<your column here>) as column+name
from Emp_Actions t1 join
     Emp_Fines  
     on  t1.Code = t2.Code 
where (t1.Code = "MYParameter" or @MyParameter = "" )
group by t1.Code, t2.Details, t2.FineDate