2013-04-22 60 views
0

我有一個簡單的SQL查詢,其返回的數據如何從SQL查詢結果中返回特定行到底部?

select [BusinessModel], count(*) As Total from DimHotelExpand 
group by [BusinessModel] 

結果當屬:

DA  53894 
DL  7098 
ECM  1472 
Flex  14789 
GDS  33487 
Lead  1499050 
MT  71306 
Unknown 572467 

我想和值「提前」的行出現在結果的底部。我怎樣才能做到這一點?

+2

「Lead」背後的邏輯是什麼? – hims056 2013-04-22 07:42:53

+0

您可以添加:Order By Total到您選擇的語句 – Milen 2013-04-22 07:43:45

回答

1

你可以試試這個,如果你不知道鉛是否始終最大價值:

select 
    [BusinessModel], count(*) As Total 
from DimHotelExpand 
group by 
    [BusinessModel] 
order by 
    case [BusinessModel] when 'Lead' then 1 else 0 end asc 
+0

甜..謝謝! – 2013-04-22 07:55:15

1

你可以通過你的總列順序是(因爲鉛的數量要高)這樣的:

SELECT [BusinessModel], count(*) As Total from DimHotelExpand 
GROUP BY [BusinessModel] 
ORDER BY count(*) 
2

嘗試這一個 -

SELECT 
     d.BusinessModel 
    , Total = COUNT(1) 
FROM dbo.DimHotelExpand d 
GROUP BY d.BusinessModel 
ORDER BY 
     CASE WHEN d.BusinessModel = 'Lead' THEN 0 ELSE 1 END 
    , Total 
+0

但是我們是否假設Total每次都是最高的? – 2013-04-22 07:53:03

+0

請嘗試更新的答案。 – Devart 2013-04-22 08:00:32

1

您可以嘗試使用「union all」。

select [BusinessModel], count(*) As Total from DimHotelExpand 
where [BusinessModel] <> 'Lead' 
group by [BusinessModel] 
union all 
select [BusinessModel], count(*) As Total from DimHotelExpand 
where [BusinessModel] = 'Lead' 
group by [BusinessModel] 

「Order by」的解決方案,我相信不能正常工作。只有在「領先」是更大的商業模式時才能正常工作。

我認爲frikozoid解決方案也是有效的。

+0

不能保證最終會顯示帶有「Lead」的行。 – 2013-04-22 08:10:06

+0

我認爲對於「union」子句是這樣的,因爲首先對行進行排序以消除重複並且還返回有序的行。但至少在Oracle中,並不適用於「union all」這個條款。 (儘管認爲frikozoid解決方案是最好的。) – 2013-04-22 08:29:54

+1

大多數情況下,大多數情況下DBMS的行爲都與此類似。但不總是。我的觀點是,無法保證他們總是這樣做。因爲他們這麼做了你測試它的幾次,並不意味着什麼。 – 2013-04-22 08:34:41