Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да комбинирам GROUP BY и ROW_NUMBER?

Уау, другите отговори изглеждат сложни - така че се надявам да не съм пропуснал нещо очевидно.

Можете да използвате OVER /PARTITION BY срещу агрегати и след това ще извършат групиране/агрегиране без GROUP BY клауза. Така че току-що промених вашата заявка на:

select T2.ID AS T2ID
    ,T2.Name as T2Name
    ,T2.Orders
    ,T1.ID AS T1ID
    ,T1.Name As T1Name
    ,T1Sum.Price
FROM @t2 T2
INNER JOIN (
    SELECT Rel.t2ID
        ,Rel.t1ID
 --       ,MAX(Rel.t1ID)AS t1ID 
-- the MAX returns an arbitrary ID, what i need is: 
      ,ROW_NUMBER()OVER(Partition By Rel.t2ID Order By Price DESC)As PriceList
        ,SUM(Price)OVER(PARTITION BY Rel.t2ID) AS Price
        FROM @t1 T1 
        INNER JOIN @relation Rel ON Rel.t1ID=T1.ID
--        GROUP BY Rel.t2ID
)AS T1Sum ON  T1Sum.t2ID = T2.ID
INNER JOIN @t1 T1 ON T1Sum.t1ID=T1.ID
where t1Sum.PriceList = 1

Което дава искания набор от резултати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да декларирам скаларната променлива в VIEW в Sql Server (2005)

  2. 7 факта за синонимите на SQL Server, които трябва да знаете

  3. Какво е новото в SQL Server 2019?

  4. Как да намеря зависимости от външни ключове в SQL Server?

  5. Внедряване на проект за база данни VS2010 - задачата SqlDeployTask се провали неочаквано, NullReferenceException