2010-12-16 40 views
2

我有一系列由UNION雞蛋綁在一起SELECT COUNT查詢SQL服務器數查詢沒有爲了

Select Count(Column1) From Table1 where Table1 column1 = 1 
union 
Select Count(Column2) From Table1 where Table1 column2 = 1 

它工作正常,但它只是在遞增或遞減順序的訂單,但我希望它爲了去根據我的要求,我希望第一個查詢總是在結果中處於第一位,而不管它的值是什麼。謝謝你的幫助。

回答

1

試試這個:

SELECT COUNT(*) AS cnt, 1 AS SortOrder FROM Table1 WHERE column1 = 1 
UNION ALL 
SELECT COUNT(*) AS cnt, 2 AS SortOrder FROM Table1 WHERE column2 = 1 
ORDER BY SortOrder 

我所作出的主要變化是增加你可以用它來借命令列。我所做的其他一些更改如下:

  • 您的意思並不是指UNION,您的意思是UNION ALL。否則,如果你的查詢數量相同,你只能得到一行。在新的查詢中,這不會發生,但是您仍然應該使用UNION ALL,因爲這在語義上意味着什麼。
  • 寫入COUNT(column1)是不必要的,因爲您的WHERE子句保證column1永遠不能爲NULL。使用COUNT(*)。我想,即使你寫了COUNT(column1)大多數數據庫都會看到column1不能爲NULL,並且省略了不必要的NULL檢查,但是再次明確地說沒有什麼問題 - 你想要統計所有的行,並且COUNT(*)可以清楚地說明。
  • 你不應該有Table1 column1之間的空格。應該有一個點。或者乾脆省略表格名稱,因爲這裏不需要。
+0

謝謝這幫助了很多。 – user516883 2010-12-17 14:28:08

3

運行兩個查詢?

2

您可以添加一列排序上

Select 1 as sequence, Count(Column1) From Table1 where Table1 column1 = 1 
union 
Select 2 as sequence, Count(Column2) From Table1 where Table1 column2 = 1 
ORDER BY sequence