2012-07-13 55 views
1

我有一個關於如何使用sql對數據進行排序的問題。爲此,我舉了一個簡單的例子來說明我的問題。用sql排序

if object_id('MyTable', 'U') is not null drop table dbo.MyTable; 

create table MyTable 
(
    country varchar(10) not null 
    , town varchar(10) not null 
    , amount int not null 
) 

insert into MyTable values 
('US', 'NYC', 100) 
, ('US', 'BAL', 150) 
, ('US', 'WAS', 200) 
, ('CA', 'MON', 100) 
, ('CA', 'TOR', 150) 
, ('CA', 'VAN', 200) 

我如何將數據在一定意義上所有「國家總額來分類的遞減順序和字母順序對每個國家的城市進行排序。

感謝, 基督教

+1

MYTABLE MT = mt.country

order by ctotal.countrytotal,ctotal.country,mt.town 

將預期的輸出是該數據集是什麼根據你的標準? – 2012-07-13 19:30:10

回答

1

我認爲這應該這樣做:

SELECT 
    country, 
    SUM(amount) OVER(PARTITION BY country) as CountryTotal, 
    town, 
    amount 
FROM  MyTable 
ORDER BY CountryTotal, country, town 
+0

這是有效的!非常感謝。 – chhenning 2012-07-13 19:59:32

3

要排序的SQL,使用ORDER BY:http://msdn.microsoft.com/en-us/library/ms188385.aspx

所以,如果你想按國家排序,然後將金額,然後鎮,你會在哪裏你像類後面加一個ORDER BY子句:

ORDER BY Country, Amount DESC, Town 
+0

感謝您的提示。但是,當我運行的城鎮沒有排序。 select * from MyTable ORDER BY Country,Amount DESC,Town – chhenning 2012-07-13 19:57:52

+0

這將在排序城鎮之前對Country和Amount進行排序。因此,如果城鎮應該在國家內排序而不是數量,請切換它們。雖然,看起來我並不完全理解你的問題 - @RBarryYoung有一個更合適的答案。 – Erica 2012-07-13 20:29:37

0

我不知道你是否要由國家或只是量的總量訂購。以下爲國家使用總量的 。

select 
mt.country, 
ctotal.countrycotal, 
mt.town, 
mt.amount 
from 
(
SELECT 
country, 
SUM(amount) as countrycotal, 
FROM  MyTable 
group BY country 

)c總 內部聯接上ctotal.country只是使用量低於

select * from Mytable 
order by mt.amount,mt.country,mt.town