SQL Merge 2列具有相同的名称和数据类型,但是Sum Function的结果

时间:2013-12-12 19:56:50

标签: sql sql-server

我有这个选择声明。我知道我可以通过联盟解决这个问题,但我被告知效率不高,而且我的老板要求我在单个查询中进行,而不是使用Union,因为它是同一个表。这是有道理的。

 select 
 'No Photos' as 'Type',
  SUM( case when Cntimagedata  < 12 or cntimagedata is null  then 1 else 0 end) as     Value,
 'Incomplete Photos' as 'Type',
  SUM( case when Cntimagedata < 12 then 1 else 0 end) as Value
  from tablemain

查询生成以下表格。


&#39;类型&#39; | &#39;值&#39; | &#39;类型&#39; | &#39;值&#39;

没有照片| 15 |不完整的照片| 3


但我的回答必须是


&#39;类型&#39; ----------------- | ----&#39;价值&#39;

没有照片------------ | 15

不完整的照片 - | 3


只有2列而不是4 ...这可能吗?我一直试图让这个解决方案起作用。并且加入不适合这个(我认为),因为我需要的所有数据都在这个单独的表中。

我之前提到过,我无法使用Union,因为我的老板说我的查询速度较慢。

1 个答案:

答案 0 :(得分:1)

SELECT 'No Photos' as 'Type', SUM( case when Cntimagedata  < 12 or cntimagedata is null  then 1 else 0 end) as     Value
FROM tablemain
UNION SELECT 'Incomplete Photos' as 'Type', SUM( case when Cntimagedata < 12 then 1 else 0 end) as Value
FROM  tablemain

或者因为您现在可以将条件放在where子句

SELECT 'No Photos' as 'Type', count(cntimagedata) Value
FROM tablemain where Cntimagedata  < 12 or cntimagedata is null
UNION SELECT 'Incomplete Photos' as 'Type', count(cntimagedata) Value
FROM  tablemain where Cntimagedata  < 12