我要联接两个表,并且我的查询包含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,但我不希望它显示在分组依据中。
答案 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),以便更好地控制选择哪个值,也取决于其他列值。
答案 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