标签: calculated-columns

无法持久计算列 - 不确定

我有一个计算列的函数:

CREATE FUNCTION [dbo].[GetAllocatedStartTime](@Year INT, @Week INT)
RETURNS DATETIME

WITH schemabinding
AS BEGIN
    RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT([varchar](4),@Year,(0))+'-01-01'),(1))))
END

GO
Run Code Online (Sandbox Code Playgroud)

我添加了WITH schemabinding希望它会使它确定性,所以我可以坚持下去.它应该作为两个输入[Week]并且[Year]将始终产生相同的结果.

确切的错误是:

表'Tmp_Bookings'中的计算列'AllocatedTimeStart'无法保留,因为该列是非确定性的.

我在列中使用此公式:

([dbo].[GetAllocatedStartTime]([Year],[Week]))
Run Code Online (Sandbox Code Playgroud)

列定义:

[Week] [int] NOT NULL,
[Year] [int] NOT NULL,
[AllocatedTimeStart]  AS ([dbo].[GetAllocatedStartTime]([Year],[Week])),
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑:

将行改为:

RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112)),(1))))
Run Code Online (Sandbox Code Playgroud)

但现在我得到一个错误,说该列的公式无效.即使功能保存良好.

编辑2:

我已经准确地展示了我在做什么(或至少我已经尝试过).真的没什么.正如它所说的那样,前一个函数(原始函数)加上[dbo].AllocatedStartDate(...)列中的公式参考,但是没有坚持,它说这是不确定的.所以根据建议我更改了FUNCTION,用新代码替换了转换部分,所以现在看起来像:

FUNCTION [dbo].[GetSTime](@Year INT, @Week INT)

RETURNS DATETIME
WITH schemabinding
AS BEGIN
    RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112)),(1))))
END
Run Code Online (Sandbox Code Playgroud)

然后我在计算字段中尝试了与之前相同的公式(([dbo].[GetAllocatedStartTime]([Year],[Week])))......并且它拒绝公式,说它无效......这很奇怪,因为公式是相同的,所以它必须对变化进行某种检查功能和发现是无效的,这也很奇怪,因为我做了一个平原SELECT dbo.GetAllocatedStartTime(2012,13),它的工作......

所以是的,我很困惑,我从来没有见过,SqlFiddle从不介意使用它.但实际上只有我刚才所说的.

database sql-server calculated-columns sql-server-2008-r2

12
推荐指数
1
解决办法
2万
查看次数

SQL Server中计算列的最佳实践

我正在使用用户表,并希望设置"试用期结束日期".基本上,每个新用户从他们作为试用期的一部分加入时有2个完整月份.我看到我可以在我的用户表的列中放置一个公式,但我想知道我是否应该有一个更新此脚本的脚本,或者这是否是使用计算列的可接受时间.我访问此表以获取各种内容,并偶尔会根据性能里程碑成就更新用户行.申请日期永远不会更改/更新.

我的问题是:在这种情况下使用计算列是一个好习惯还是每次更新该行时都会重新计算(即使我不打算更新应用程序日期)?我在将来更新行时不想创建更多开销.

公式I在试用结束日期的列定义中使用:

(dateadd(day,(-1),dateadd(month,(3),dateadd(day,(1)-datepart(day,[APP_DT]),[APP_DT]))))
Run Code Online (Sandbox Code Playgroud)

sql-server calculated-columns sql-server-2012

12
推荐指数
2
解决办法
2万
查看次数

将列添加到Pandas DataFrame的末尾,其中包含以前数据的平均值

我有一个ave_data包含以下内容的DataFrame :

ave_data

Time        F7           F8            F9  
00:00:00    43.005593    -56.509746    25.271271  
01:00:00    55.114918    -59.173852    31.849262  
02:00:00    63.990762    -64.699492    52.426017
Run Code Online (Sandbox Code Playgroud)

我想在此数据框中添加另一列,其中包含每行的F7,F8和F9列下的平均值.

ave_data我的代码不同的Excel文件中读取数据帧后可能会改变大小,所以该方法需要是通用的(即加总是包含平均在数据帧的最后一列列,不列号4)

desired output

Time        F7           F8            F9           Average
00:00:00    43.005593    -56.509746    25.271271    4.25  
01:00:00    55.114918    -59.173852    31.849262    9.26
02:00:00    63.990762    -64.699492    52.426017    17.24
Run Code Online (Sandbox Code Playgroud)

python calculated-columns dataframe pandas

12
推荐指数
3
解决办法
2万
查看次数

基于另一个计算列的计算列?

我有一个叫做Cost返回钱的计算列.

我想要另一个返回(Cost * 2)的列,但它不允许我.

sql-server-2005 calculated-columns

11
推荐指数
2
解决办法
7221
查看次数

Visual Studio 2010中SQLCLR项目中的计算列

在处理VS 2010 SQL CLR项目和计算列时,MS似乎有一个错误.我正在使用Pre/PostDeployScript.sql来删除/添加计算列.但是,如果我尝试从VS2010部署它,我会遇到依赖性错误.同一项目在Vs2008中100%运行.我想知道我在部署解决问题方面的选择是什么?我也与MS有联系,但他们还没有找到解决方法/解决方案.

deployment sqlclr calculated-columns visual-studio-2010

11
推荐指数
1
解决办法
361
查看次数

SQL Server:可从数据库中检索的计算列定义?

我想从数据库查询计算列的定义,但找不到似乎做我想要的命令...

例如,如果列定义为:

CallDT AS (CONVERT([datetime],dateadd(second,[StartDate],'01/01/1970'),(0)))
Run Code Online (Sandbox Code Playgroud)

在DDL中,我想在数据库上运行一个命令来检索"AS"语句,以便将其与预期值进行比较.(我正在开发一个将现有数据库与DDL定义进行比较的SQL解析器)...

这可能吗?

sql database sql-server calculated-columns

11
推荐指数
2
解决办法
6320
查看次数

Pivot计算公式:SUM(Field1)/ AVG(Field2)

我有一个简单的表,其中包含一些数量和间隔,以秒为单位和产品名称.

Month | Product | Amount | Interval in sec
------------------------------------------
05-'12| Prod A  | 10     | 5
05-'12| Prod A  | 3      | 5
05-'12| Prod B  | 4      | 5
05-'12| Prod C  | 13     | 5
05-'12| Prod C  | 5      | 5
Run Code Online (Sandbox Code Playgroud)

从这个表中我得到了一个数据透视表,其中包含SUM(金额),AVERAGE(以秒为单位的间隔)按月和产品.

Month | Product | SUM of Amount | AVG of Interval in sec
--------------------------------------------------------
05-'12| Prod A  | 13            | 5
05-'12| Prod B  | 4             | 5
05-'12| Prod C  | 18 …
Run Code Online (Sandbox Code Playgroud)

excel pivot-table calculated-columns

11
推荐指数
2
解决办法
6万
查看次数

如何计算pandas中一行中所有元素的加权和?

我有一个包含多列的pandas数据框.我想weighted_sum从行中的值和另一个列向量数据帧创建一个新列weight

weighted_sum 应具有以下值:

row[weighted_sum] = row[col0]*weight[0] + row[col1]*weight[1] + row[col2]*weight[2] + ...

我找到了这个功能sum(axis=1),但它不会让我倍增weight.

编辑:我改变了一点.

weight 看起来像这样:

     0
col1 0.5
col2 0.3
col3 0.2
Run Code Online (Sandbox Code Playgroud)

df 看起来像这样:

col1 col2 col3
1.0  2.2  3.5
6.1  0.4  1.2
Run Code Online (Sandbox Code Playgroud)

df*weight返回一个充满Nan值的数据帧.

python calculated-columns weighted-average dataframe pandas

11
推荐指数
2
解决办法
2万
查看次数

尽管没有列包含0,但TSQL除以零

我一直试图理解为什么我的SQL查询得到了"除以零"(Msg 8134),但我必须遗漏一些东西.我想知道为什么对于下面的具体情况,我不是在寻找NULLIF,CASE WHEN...或者与我已经了解的相似(当然可以在下面的情况下使用它们).

我有一个SQL语句与计算列类似

SELECT
    TotalSize,
    FreeSpace,
    (FreeSpace / TotalSize * 100)
FROM
    tblComputer
...[ couple of joins ]...
WHERE
    SomeCondition = SomeValue
Run Code Online (Sandbox Code Playgroud)

使用上面提到的错误消息运行此语句错误,这本身不是问题 - 显然TotalSize可能是0并因此导致错误.

现在我不明白的是,TotalSize当我将计算列注释掉时,我没有任何列为0的行,我仔细检查过不是这种情况.

然后我认为由于某种原因,在使用where子句的条件进行实际过滤之前,将对整个结果集执行列计算,但是这个a)在imho和b)尝试使用a重现错误时没有意义测试设置一切正常(见下文):

INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0001',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0002',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0003',1)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0004',0)
INSERT INTO tblComputer (ComputerName, IsServer) VALUES ('PC0005',1)
INSERT …
Run Code Online (Sandbox Code Playgroud)

t-sql calculated-columns divide-by-zero

10
推荐指数
1
解决办法
3943
查看次数

匹配Spotfire中同一列中的组(表达式)

关于我发布的上一个问题: 计算Spotfire中特定行的相同列的差异

我有一个新问题,下面是样本:

在此输入图像描述

我想要实现的新功能是,

  • 为TYPE = 1 搜索下一个最接近的TYPE = 0
  • 如果TYPE = 1具有最接近的TYPE = 0,则在新计算列中将其标记为"T",否则为NULL

数据规则:

  • 状态列按顺序包含{1,2},空值空间的默认值与其上方最后一个最接近的状态值相同.
  • 类型列只包含0和1

输出应该是这样的:

在此输入图像描述

我试过的解决方案:

    If(([type]=1) and (first([type]) OVER (intersect(previous([type]),AllNext([status])))=0),"T",Null)
Run Code Online (Sandbox Code Playgroud)

它看起来很好,但问题出在每个状态组中,例如第一个status = 1组中的最后一个TYPE = 1(第5行),它没有接下来最接近的TYPE = 0,因此判断为Null.但基于代码,它是T!:(

有什么建议和想法吗?非常感谢'!PS:一些细节:

  • 状态的第一个Type值为NULL
  • 状态列中的其他空格可以填充如下,如果它对表达式有用:):

在此输入图像描述

expression calculated-columns spotfire

10
推荐指数
1
解决办法
747
查看次数