Select group by 子句中的前 1 列值?
Select top 1 column value in the group by clause?
我正在加入两个 table,我的查询包含 group by 子句。我想在结果中显示的联接 table 中有一列,但不希望它成为分组依据的一部分,因为列值中的值不同。我只想显示该列的任何最高值。
我尝试使用 Distinct 和 Top 1 以及其他的,但对我没有用。
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
并且代码是特定的或全部的。我的实际查询太大,我只是做了一个示例来详细说明我的问题。我需要 Top 1
FineDate,我不希望它成为分组依据的一部分,但是我想显示它。
一种只获取一个值的方法是在 SELECT 语句中使用 MAX(col) 或 MIN(col),其中 col 是您不想分组的列。一个优点是您获得的值有些一致(按顺序排在第一位或最后一位)。
SELECT t1.Code, t2.Details, t2.FineDate, MAX(col) my_col, 求和( t1.Amount) 来自 Emp_Actions t1
此外,还有更高级的分析 window 函数(例如 first_value),如果您想这样做,可以更好地控制选择哪个值,也取决于其他列值。
您可以使用子查询来获得所需的结果。
我给你一个示例代码:
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 是您想要在结果中但不想在分组依据中使用的列
使用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
我正在加入两个 table,我的查询包含 group by 子句。我想在结果中显示的联接 table 中有一列,但不希望它成为分组依据的一部分,因为列值中的值不同。我只想显示该列的任何最高值。
我尝试使用 Distinct 和 Top 1 以及其他的,但对我没有用。
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
并且代码是特定的或全部的。我的实际查询太大,我只是做了一个示例来详细说明我的问题。我需要 Top 1
FineDate,我不希望它成为分组依据的一部分,但是我想显示它。
一种只获取一个值的方法是在 SELECT 语句中使用 MAX(col) 或 MIN(col),其中 col 是您不想分组的列。一个优点是您获得的值有些一致(按顺序排在第一位或最后一位)。
SELECT t1.Code, t2.Details, t2.FineDate, MAX(col) my_col, 求和( t1.Amount) 来自 Emp_Actions t1
此外,还有更高级的分析 window 函数(例如 first_value),如果您想这样做,可以更好地控制选择哪个值,也取决于其他列值。
您可以使用子查询来获得所需的结果。
我给你一个示例代码:
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 是您想要在结果中但不想在分组依据中使用的列
使用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