TL; DR如何在不将它们添加到MSSQL中的GROUP BY子句的情况下返回列?刑事陈述如下。
大家好, 所以我最近问了这个question,得到了一个很好的解决方案,我能够解剖和重组以解决我的问题。这是最终结果
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子句的智能方法。
答案 0 :(得分:3)
如果您要分组的所有内容的列都是相同的值,那么您可以执行以下操作:
SELECT col1, col2, MAX(col3) FROM table GROUP BY col1, col2