如何压缩多个选择计数查询以提高代码效率?

时间:2013-04-29 09:07:05

标签: sql coldfusion

我正在编写一个ColdFusion页面来生成一个Excel表格,如下所示:enter image description here

我想从数据库中的一个表生成多列信息。对于每一列,我实际上需要一个SELECT COUNT来获得结果。像这样;

Select count (yT) as pageOneView from tTable where userGUID=#Query.guid# AND id='00101'

Select count (yT) as pageTwoView from tTable where userGUID=#Query.guid# AND id='00201'

Select count (yT) as pageThreeView from tTable where userGUID=#Query.guid# AND id='00301'

请注意,更改的唯一细节是计数名称和ID。 如何将这些组合成一个<cfquery>而不是每个<cfquery>

2 个答案:

答案 0 :(得分:4)

编辑以回应评论

如果你只想显示一个“布尔”值,那么计算所有行的效率很低。

select
    case when exists
        (select * from tTable
            where guid = #Query.guid# 
                and yT is not null  
                and id = '00101')
        then 'True' else 'False' end pageOneView,
    case when exists
        (select * from tTable
            where guid = #Query.guid# 
                and yT is not null  
                and id = '00201')
        then 'True' else 'False' end pageTwoView,
    case when exists
        (select * from tTable
            where guid = #Query.guid# 
                and yT is not null  
                and id = '00301')
        then 'True' else 'False' end pageThreeView

像这样,

select
        count(case id when '00101' then yT end) pageOneView,
        count(case id when '00201' then yT end) pageTwoView,
        count(case id when '00301' then yT end) pageThreeView
    from
        tTable
    where
        userGUID = #Query.guid#;

请注意Andomar's answer使用较少的代码,并且可以由SQL引擎更有效地处理,但是,不要使用您想要的架构返回结果集。

答案 1 :(得分:1)

select  id
,       count (itn)
from    tTable 
where   userGUID = #Query.guid#
        and id in ('00101', '00201', '00301')
group by
        id