sql server类似于foreach

yuvru6vn  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(344)

我和哥伦斯有意见

现在我要每个发货区域的前2个元素。我以前是这样问的

  1. SELECT Region, CustomerID, SUM(ExtendedPrice) AS Price
  2. FROM Invoices
  3. GROUP BY CustomerID, Region
  4. ORDER BY Region, Price DESC;

该查询生成如下值

现在我只需要为每个区域选择两个最大值。

ifmq2ha2

ifmq2ha21#

使用 row_number() :

  1. select rc.*
  2. from (select region, customerid, sum(extendedPrice) as price,
  3. row_number() over (partition by region order by sum(extendedprice) desc) as seqnum
  4. from invoices
  5. group by region, customerid
  6. ) rc
  7. where seqnum <= 2;
nqwrtyyt

nqwrtyyt2#

看来这样做是不对的。
试试这样的。

  1. WITH cte AS
  2. SELECT
  3. Region
  4. , CustomerID
  5. , SUM(ExtendedPrice) AS Price
  6. , ROW_NUMBER over( Region , CustomerID, SUM(ExtendedPrice) ) ORDER BY SUM(ExtendedPrice) DESC as 'row_number'
  7. FROM
  8. Invoices
  9. GROUP BY
  10. CustomerID
  11. , Region
  12. ORDER BY
  13. Region
  14. , Cena DESC
  15. SELECT
  16. region
  17. FROM
  18. cte
  19. GROUP BY
  20. region
  21. , value
  22. HAVING
  23. row_number < 2

此外,SQLServer还天真地支持for循环。https://docs.microsoft.com/en-us/sql/t-sql/queries/select-for-clause-transact-sql?view=sql-server-ver15
这将允许您指定一个子句并按您所期望的那样对其进行迭代。

展开查看全部

相关问题