TL; DR Как вернуть столбцы, не добавляя их в предложение GROUP BY в MSSQL? Ниже приводится уголовное заявление.
Привет всем,
Поэтому я недавно задал этот вопрос и получил отличное решение, которое смог разобрать и собрать, чтобы удовлетворить мою проблему. Вот итоговый результат
WITH UC AS
(
SELECT OSJ.opportunityid, OS.status,
ROW_NUMBER() OVER (PARTITION BY OSJ.opportunityid ORDER BY creationdate DESC) RN
FROM Opportunitystatusjoin OSJ
JOIN OpportunityStatus OS ON OSJ.opportunitystatusid = OS.opportunitystatusid
)
SELECT O.opportunityid , O.salesperson ,
MAX( CASE
WHEN RN = 1
THEN UC.status
END ) AS MostRecent ,
MAX( CASE
WHEN RN = 2
THEN UC.status
END ) AS SecondMostRecent
FROM Opportunity O
JOIN UC ON UC.opportunityid = O.opportunityid
WHERE UC.RN <= 2
GROUP BY O.opportunityid , O.salesperson
Теперь, если я хочу вернуть больше столбцов из таблицы Opportunity, т.е. O.shoesize, O.favorite_color, я должен добавить их в мое предложение GROUP BY. Но у меня просто возникает грязное чувство, потому что я не пытаюсь сгруппировать другие столбцы, я просто хочу, чтобы они появились с соответствующей возможностью.
В блоге, который я нашел в Интернете, говорится, что ваши предложения GROUP BY заполняются как можно дольше во вложенные варианты. Тем не менее, поскольку я использую первое утверждение («с UC ...»), оно, кажется, делает вещи менее интуитивно понятными. Что такое разумный способ включить другие столбцы из моей таблицы, не добавляя их в предложение GROUP BY.