聚合SQL数据 - MS SQL Server 2008

3

我在对订单号进行分组并聚合“支持列”时遇到了一些问题,同时选取始终为“最高”的值。

╔═════════════╦══════════════╦════════════════╗
║ OrderNumber ║ PhoneSupport ║ ServiceSupport ║
╠═════════════╬══════════════╬════════════════╣
║ 0000000001  ║ 0020         ║                ║
║ 0000000001  ║ 0010         ║ 0030           ║
║ 0000000001  ║ 0010         ║ 0020           ║
║ 0000000002  ║              ║ 0030           ║
║ 0000000002  ║ 0030         ║                ║
║ 0000000003  ║ 0020         ║                ║
║ 0000000003  ║ 0030         ║                ║
╚═════════════╩══════════════╩════════════════╝

在这个例子中,输出应该像这样。
╔═════════════╦══════════════╦════════════════╗
║ OrderNumber ║ PhoneSupport ║ ServiceSupport ║
╠═════════════╬══════════════╬════════════════╣
║ 0000000001  ║ 0020         ║ 0030           ║
║ 0000000002  ║ 0030         ║ 0030           ║
║ 0000000003  ║ 0030         ║                ║
╚═════════════╩══════════════╩════════════════╝

到目前为止,我经常在各种论坛中看到有关游标的内容,但我不喜欢使用它。

我的想法是使用over子句,但我不确定它是否适用于这种情况。

2个回答

4
使用GROUP BY,对想要获取“最高”值的列执行MAX
select OrderNumber, max(PhoneSupport), max(ServiceSupport)
from tablename
group by OrderNumber

感谢您的指点。我在问题中简化了问题,通过您简短但正确的答案,我认识到问题出在之前的cte中... - Sebastian S.

1
您可以使用Group ByMax,然后将查询包装在父级中,以对聚合列进行Order By。以下是示例。
select * 
from (
    select OrderNumber, max(PhoneSupport) as PhoneSupport, max(ServiceSupport)  as ServiceSupport
    from tablename
    group by OrderNumber) aa
Order By aa.PhoneSupport

1
那个派生表是不必要的。 - Evaldas Buinauskas
你不能只是把ORDER BY放在最后面,而不使用派生表吗?或者这是某种MS SQL Server的限制吗? - jarlh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接