2013-12-12 36 views
0

我有这个select语句。我知道我可以用一个联盟来解决这个问题,但我被告知效率不高,我的老板们要求我在单个查询中完成,而不是使用联盟,因为它使用同一张表。这是有道理的。具有相同名称和数据类型但合并函数结果的SQL合并2 Colums

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 

查询生成下表。


'类型'| '价值'| '类型'| 'Value'

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


但我的答案必须


'类型' ----------------- | ---- '值'

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

不完整的照片 - | 3


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

我不能像前面提到的那样使用Union,因为我的老板们说我正在使查询变慢。

回答

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 
+0

感谢您的答复@vittore,但我不能,因为它减慢我的查询,我的上司要我解决了使用联盟条件它以任何其他方式因此。 –

+0

减速最有可能意味着您没有使用正确的索引。 – vittore

+0

数据正在被唯一键索引。有什么其他方式可以索引它吗?所以你说联盟不一定是表现放缓?我知道它不会像光标那样慢。 –

相关问题