2013-05-09 17 views
6

में अधिकतम मूल्य द्वारा ऑर्डर करें, मैं अपने परिणामों को एक कॉलम (NAME) द्वारा समूहित करना चाहता हूं, फिर प्रत्येक समूह के लिए दूसरे कॉलम (नोट) द्वारा ऑर्डर करना चाहता हूं, और आखिरकार समूह को उनके उच्चतम नोट द्वारा ऑर्डर करना है।समूह

तो, मेरी संस्थाओं इस तरह के तले कर रहे हैं:

NAME   NOTE 
Andrew  19 
Thomas  18 
Andrew  18 
Andrew  17 
Frank  16 
Frank  15 
Thomas  14 
Thomas  12 
Frank  5 

मैं उन्हें चाहते हैं इस तरह का आदेश दिया जा करने के लिए:

NAME   NOTE 
Andrew  19 
Andrew  18 
Andrew  17 
Thomas  18 
Thomas  14 
Thomas  12 
Frank  16 
Frank  15 
Frank  5 

एंड्रयू पहले प्रदर्शित होने के साथ, नाम के आधार पर वर्गीकृत क्योंकि उसके उच्चतम टिप्पणी 1 9 है, फिर थॉमस (18) और फ्रैंक (16)।

select name, note 
from (select t.*, max(note) over (partition by name) as maxnote 
     from t 
    ) t 
order by maxnote desc, name 

maxnote द्वारा आदेश देने के अलावा, यह भी नाम से आदेश:

सादर,

वैल

उत्तर

3

यहाँ खिड़की कार्यों का उपयोग कर यह करने के लिए एक तरीका है। यदि संबंध हैं, तो यह एक साथ दिए गए नाम के लिए सभी रिकॉर्ड रखता है।

+0

+1 आप by' 'आदेश afer एक उपनाम का उल्लेख कर सकते हैं, इसलिए सबक्वेरी – Andomar

+0

की कोई आवश्यकता नहीं @Andomar। । । अगर इसे इस तरह लिखा गया था, तो आउटपुट में 'maxnote' होना होगा। –

+0

@ गॉर्डन लिनॉफ नाइस, ऑर्डर में अधिकतम नोट इसके बाद 'desc' होना चाहिए, लेकिन अच्छा समाधान होना चाहिए। –

3

CTE जवाब ...

Create Table NameNoteTable (Name Varchar(10), Note Int); 

Insert NameNoteTable 
Select 'Andrew', 19 
Union All 
Select 'Andrew', 18 
Union All 
Select 'Andrew', 17 
Union All 
Select 'Thomas', 18 
Union All 
Select 'Thomas', 14 
Union All 
Select 'Thomas', 12 
Union All 
Select 'Frank', 16 
Union All 
Select 'Frank', 15; 

With cte As 
(
     Select Row_Number() Over (Order By Max(Note) Desc) As tID, 
       Name, 
       Max(Note) As MaxNote 
     From NameNoteTable 
     Group By Name 
) 
Select nnt.Name, nnt.Note 
From NameNoteTable nnt 
Join cte c 
     On nnt.Name = c.Name 
Order By tID, Note Desc; 
1
SELECT t.name, t.note 
FROM @tbl t 
ORDER BY (SELECT MAX(note) FROM @tbl WHERE name = t.name) DESC 
     , name 
     , note DESC 

यह सबसे आसान तरीका है, विभाजन से उपयोग करते हुए केवल थोड़ा अधिक वाक्य रचना है और बड़ा टेबल पर होने की संभावना अधिक कुशलतापूर्वक चलते होता है।

0

बहुत आसान तरीका:

चयन नाम, नाम एएससी द्वारा NameNoteTable आदेश से ध्यान दें, टिप्पणी की वर्णन

+1

यह क्वेरी वर्णानुक्रम के 'नाम' कॉलम को ऑर्डर करती है। प्रश्न में, 'नाम' कॉलम प्रति उपयोगकर्ता 'नोट' के अवरोही क्रम के आधार पर आदेश दिया जाना चाहिए – KartikKannapur