MS - Sql с использованием кросс-выбора? - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть запрос с группой по. У меня также есть пара школьных Id min и max заработок. Я сгруппировал, и я хочу рассчитать общий доход. но я не знаю, как я могу использовать перекрестный выбор.

 RowId    SchoolId  month   maxEarning   minEarning

 1         1        1        1000         900
 2         1        2        2000         300 
 3         1        3        1500         750
 4         2        1        2000         500
 5         2        2        1500         1000
 6         3        1        2000         1000 

ответ будет

  school id 1 ==> diff second month and first month 2000 - 900 = 1100
  school id 1 ==> diff third month and second month 1500 - 300 = 1200
  school id 2 ==> diff second month and first month 1500 - 500 = 1000
  school id 3 ==> diff first month only 2000

наконец, я хочу видеть как:

   RowId    SchoolId  month   maxEarning   minEarning    DiffWithGroup
    1         1        1        1000         900         1000
    2         1        2        2000         300         1100
    3         1        3        1500         750         1200
    4         2        1        2000         500         2000
    5         2        2        1500         1000        1000
    6         3        1        2000         1000        2000

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

для SQL Server 2012 и более поздних версий вы можете использовать LAG ()

select  *,
        maxEarning - isnull(LAG(minEarning) over (partition by SchoolId 
                                                      order by month), 0) as DiffWithGroup
from    your_table
0 голосов
/ 26 апреля 2018

Мы можем использовать функцию LAG для этого -

select
    RowId,
    SchoolId,
    month,
    maxEarning,
    minEarning,
    DiffWithGroup = (maxEarning - lag(minEarning,1,0) over(partition by SchoolId order by month))
from YourTableName

Проверьте здесь эту функцию - Функция LAG TSQL

0 голосов
/ 26 апреля 2018

Аналитическая функция LAG - это один из вариантов, если ваша версия SQL Server поддерживает ее:

SELECT
    RowId, SchoolId, month, maxEarning, minEarning,
    maxEarning - LAG(minEarning, 1, 0) OVER
        (PARTITION BY SchoolId ORDER BY month) AS DiffWithGroup
FROM yourTable
ORDER BY RowId;

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...