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