Sql 按正确用法分组

Sql 按正确用法分组,sql,sql-server,group-by,aggregate,Sql,Sql Server,Group By,Aggregate,TL;DR如何在不将列添加到MSSQL中的GROUPBY子句的情况下返回列?刑事陈述如下 各位好,, 所以我最近问了这个问题,得到了一个很好的解决方案,我能够对它进行剖析和重组,以适应我的问题。这是最终结果 WITH UC AS ( SELECT OSJ.opportunityid, OS.status, ROW_NUMBER() OVER (PARTITION BY OSJ.opportunityid ORDER BY creationdate DESC) RN

TL;DR如何在不将列添加到MSSQL中的GROUPBY子句的情况下返回列?刑事陈述如下

各位好,, 所以我最近问了这个问题,得到了一个很好的解决方案,我能够对它进行剖析和重组,以适应我的问题。这是最终结果

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\u color,我必须将它们添加到我的GROUPBY子句中。但我只是有一种不好的感觉,因为我不想把其他专栏分组,我只是想让他们展示各自的机会


我在互联网上找到的一个博客说,把你的分组按子句塞进尽可能多的嵌套选择中。但是,由于我使用UC的第一个语句。。。这似乎让事情变得不那么直观。在不将其他列添加到GROUP BY子句的情况下,从“我的表”中包含其他列是一种明智的方法。

如果要按相同的值对所有列进行分组,则可以执行以下操作:

SELECT col1, col2, MAX(col3) FROM table GROUP BY col1, col2

如果您分组所依据的所有列的值都相同,则可以执行以下操作:

SELECT col1, col2, MAX(col3) FROM table GROUP BY col1, col2

我不认为所有列的值都是相同的,因为返回的Opportunity会有不同的鞋样和最喜欢的颜色。那么您想列出哪些。如果要列出所有可能的组合,则需要使用GROUP BY。我不认为列的值都是相同的,因为返回的Opportunity会有不同的鞋色和最喜欢的颜色。然后,您要列出哪些组合。如果要列出所有可能的组合,则需要使用“分组依据”。