是否可以使用基于案例陈述的表格?

时间:2013-05-06 19:50:02

标签: sybase

我有一个看起来像这样的程序。

CREATE PRODEDURE get_count
    @rdr CHAR(3)
AS
    SELECT t.cnt FROM (
    SELECT COUNT(*) cnt, 'X' rdr  FROM table_X
    UNION ALL
    SELECT COUNT(*) cnt, 'Y' rdr FROM table_Y
    UNION ALL
    SELECT COUNT(*) cnt , 'Z' rdr  FROM table_Z) t
    WHERE t.rdr = @rdr

是否可以使用case语句或其他一些我不知道的Sybase技巧来优化上述过程?因此,当你传递'X'时它使用table_X,当你传递'Y'时使用table_Y等等。优化的唯一动机是因为个别count()操作需要花费很多时间而且每次我都做一个停顿的电话......

2 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点

1-在if else语句中添加查询

如果@ var =“X”
从table_X中选择count(*)

如果@ var =“Y”
从table_Y中选择count(*)

如果@ var =“Z”
从table_Z中选择count(*)

或使用动态SQL--传递表名作为输入
声明@a varchar(30)
选择@ a =“table_name”
EXEC(“选择计数(*)来自”+ @ a)

谢谢,

答案 1 :(得分:0)

在每个表上运行SELECT COUNT查询并收集计数。然后将所有计数加在一起以获得最终结果。

虽然这是以运行三个查询而不是一个查询为代价的,但它消除了UNION并允许您在每个表的rdr字段上使用索引。