是否可以在带有groupby的子查询中使用参数并在sql查询中使用参数?

问题描述 投票:0回答:1

我正在尝试使用等级来获得每个字母的等级,并使用参数来选择具有功能的等级

例如:这是我的表格数据:

Alphabet                           Date       
 A                    2019-12-19 12:31:43.633
 A                    2019-12-19 12:31:43.650
 B                    2019-11-07 11:37:08.560 

select * 
from (select alphabet, date, 
             dense_Rank() over (partition by alphabet order by date) RankOrder
      from mytable
     ) A
group by alphabet, date, RankOrder
having RankOrder = 1

通过使用上面的查询,这是我的结果:

Alphabet                           Date                        Rank Order

 A                    2019-12-19 12:31:43.633                   1


 B                    2019-11-07 11:37:08.560                   1

如果我必须使用参数对多个字母执行此操作,该怎么办?使用声明@palphabet int ='A',@ pyear nvarchar(20)= 2019如何将参数添加到上述查询中?

sql sql-server subquery ssms
1个回答
0
投票

您可以添加where子句:

select a.* 
from(select alphabet,date,dense_Rank() over (partition by alphabet order by date) RankOrder
     from mytable mt
     where mt.Alphabet = @palphabet and year(mt.date) = @pyear
     ) a
where RankOrder = 1;

我认为这里不需要带GROUP BY子句的HAVING。由于您拥有原始数据而不是合计数据,因此您使用alphabet仅为每个where RankOrder = 1返回1行。

注意:您不能使用INT Alphabet,因为基表包含文本值。因此,更改变量@palphabet的类型。

© www.soinside.com 2019 - 2024. All rights reserved.