在SQL中对具有相同ID的行求和

在SQL中对具有相同ID的行求和,sql,sql-server,Sql,Sql Server,假设我有下表: Symbol| profit | person AAPL +723 A AAPL -100 B BBY +123 A NTAP +513 A 我想按利润选择前n个和后n个符号(忽略是人A还是人B)。因此,AAPL应排在第一位,并应显示623的利润 。。。在sql server中 现在我正在做一些类似的事情: SELECT TOP 15 sym profit FROM x GROUP BY sym, profit ORD

假设我有下表:

Symbol| profit | person 
AAPL    +723     A
AAPL    -100     B
BBY     +123     A
NTAP    +513     A
我想按利润选择前n个和后n个符号(忽略是人A还是人B)。因此,AAPL应排在第一位,并应显示623的利润

。。。在sql server中

现在我正在做一些类似的事情:

SELECT TOP 15 sym profit FROM x
GROUP BY sym, profit
ORDER BY profit DESC
使用:

注意:添加一个
WHERE
子句以限制记录(如果需要)。

这应该可以:

(
SELECT TOP 15
       Symbol,
       SUM(Profit)
FROM YourTable
GROUP BY Symbol
ORDER BY SUM(Profit)
) UNION (
SELECT TOP 15
       Symbol,
       SUM(Profit)
FROM YourTable
GROUP BY Symbol
ORDER BY SUM(Profit) DESC
)

利润
字段的数据类型是什么?如果你想让前十五名跟在后十五名后面,你可能需要两个查询,它们之间有一个
联合
。@Polly我可以将前十五名和后十五名作为单独的查询运行。这对我不起作用。。。不知道为什么。我也许应该提到,还有其他列,如“截止日期”,您也需要
按金额(利润)
订购。这还不够吗?从表组中按符号顺序按金额(利润)选择前15位符号、金额(利润)。。。为什么是联盟?你的问题听起来像是你想要顶部和底部的结果附加在一起。如果没有,只需从这个答案中删除括号和联合,这就是你的两个问题。是的,联合是因为OP需要顶部和底部的15个条目。如果只需要前15名,就不需要了。如果单独的查询很好,那么这两个部分也可以在没有联合的情况下单独运行。
(
SELECT TOP 15
       Symbol,
       SUM(Profit)
FROM YourTable
GROUP BY Symbol
ORDER BY SUM(Profit)
) UNION (
SELECT TOP 15
       Symbol,
       SUM(Profit)
FROM YourTable
GROUP BY Symbol
ORDER BY SUM(Profit) DESC
)