2012-02-13 10 views
0

TL; DR MSSQLのGROUP BY句にカラムを追加せずにカラムを返すにはどうすればよいですか?刑事声明は以下の通りです。グループを適切に使用する

こんにちは、誰も、 私は最近、このquestionと尋ねた私は解剖することができた素晴らしい解決策を得て、スイートに私の問題を再構築しました。私はO.shoesize、O.favorite_colorすなわち商談テーブルから複数の列を返すようにしたい場合はここで今、最終的な結果

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 

ですが、私は私のBY句GROUPに追加する必要があります。しかし、私は他の列をグループ化しようとしていないので、ちょうど汚い気持ちになります。私は彼らにそれぞれの機会を見せてほしいのです。

インターネット上で見つけたブログは、できるだけネストされた選択肢まであなたのGROUP BY句を埋めると言っていました。しかし、私は最初のステートメント( "with UC ...")を使用しているので、直感的ではありません。 GROUP BY句に追加することなく、テーブルの他の列を含めることは賢明な方法です。

答えて

3

列はあなたがすることによってグループ化されているすべての値が同じであることを行っている場合は、このような何か行うことができます:

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

を私は列の値がすべて同じになるとは思いません返された機会のためのshoesizesとfavorite_colorsの変化があるためです。 –

+1

次に、どのものをリストしますか? GROUP BYを使用する必要があるすべての組み合わせをリストしたい場合。 – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

関連する問題