在计算列中使用求和函数

时间:2019-07-29 15:16:04

标签: tsql ssms calculated-columns

是否可以在计算列中使用求和函数? 如果是,我想创建一个计算列,该列计算日期小于该条目日期的同一表中的列总和。这可能吗? 最后,这是否可以优化下面的示例视图中对该值的重复调用?

$("#submitbtn").mouseover(function(e) {
 console.log("Hover");
 $.(":focus").blur();
 removeTimeouts();
 $("#submitbtn").focus();
 e.preventDefault();
 e.stopPropagation();
 e.cancelBubble = true;
});

....

function placeCursor(id) {
  id.focus(function(e) {
  e.stopPropagation();
  //e.cancelBubble();
  id.caretToEnd();
 });
 id.focus();
 return false;
}

1 个答案:

答案 0 :(得分:0)

  

是否可以在计算列中使用求和函数?

是的,可以为您的计算列使用scalar valued function(标量UDF),但这将是一场灾难。将标量UDF用于计算列会破坏性能。添加访问数据的标量UDF(在此需要)将使情况变得更糟。

在我看来,您只需要一个良好的老式索引即可加快处理速度。首先是一些示例数据:

IF OBJECT_ID('dbo.somelist','U')    IS NOT NULL DROP TABLE dbo.somelist;
GO

CREATE TABLE dbo.somelist
(
  ProductGroup INT           NOT NULL,
  [Month]      TINYINT       NOT NULL CHECK ([Month] <= 12),
  Sales        DECIMAL(10,2) NOT NULL
);

INSERT dbo.somelist 
VALUES (1,1,22),(2,1,45),(2,1,25),(2,1,19),(1,2,100),(1,2,200),(2,2,50.55);

和正确的索引:

CREATE NONCLUSTERED INDEX nc_somelist ON dbo.somelist(ProductGroup,[Month])
INCLUDE (Sales);

有了此索引,此查询将非常高效:

SELECT   s.ProductGroup, s.[Month], SUM(s.Sales)
FROM     dbo.somelist AS s
GROUP BY s.ProductGroup, s.[Month];

如果您需要按月份和产品组获取COUNT,则可以创建一个索引视图,如下所示:

CREATE VIEW dbo.vw_somelist WITH SCHEMABINDING AS 
SELECT   s.ProductGroup, s.[Month], TotalSales = COUNT_BIG(*)
FROM     dbo.somelist AS s
GROUP BY s.ProductGroup, s.[Month];
GO

CREATE UNIQUE CLUSTERED INDEX uq_cl__vw_somelist ON dbo.vw_somelist(ProductGroup, [Month]);

建立索引视图后,您的COUNT将被预先汇总。但是,您不能在索引视图中包括SUM。