2012-02-13 50 views
0

TL; DR如何返回列而不將它們添加到MSSQL中的GROUP BY子句中?以下是犯罪陳述。Group按照正確的用法

大家好, 所以我最近問了這個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 

現在,如果我想從機遇表即O.shoesize,O.favorite_color返回多個列,我將它們添加到我的GROUP BY子句。但我只是覺得髒兮兮的,因爲我不想將其他專欄分組,我只是希望他們能夠以各自的機會出現。

我在互聯網上發現的一篇博客表示,儘可能將您的GROUP BY子句儘可能嵌入您的嵌套選擇中。但是,由於我使用的是第一條語句(「與UC ...」),似乎讓事情變得不直觀。包含表格中的其他列而不將其添加到GROUP BY子句的聰明方法是什麼?

回答

3

如果列將成爲你被分組一切相同的值,那麼你可以做這樣的事情:

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

,我不認爲在列的值都將是相同的,因爲返回的商機將會有不同的鞋子和favorite_colors。 – 2012-02-13 16:16:49

+1

然後你想要列出哪些。如果您想列出所有需要使用GROUP BY的可能組合。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 2012-02-13 16:35:31