我有一个计算列的函数:
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从不介意使用它.但实际上只有我刚才所说的.
我正在使用用户表,并希望设置"试用期结束日期".基本上,每个新用户从他们作为试用期的一部分加入时有2个完整月份.我看到我可以在我的用户表的列中放置一个公式,但我想知道我是否应该有一个更新此脚本的脚本,或者这是否是使用计算列的可接受时间.我访问此表以获取各种内容,并偶尔会根据性能里程碑成就更新用户行.申请日期永远不会更改/更新.
我的问题是:在这种情况下使用计算列是一个好习惯还是每次更新该行时都会重新计算(即使我不打算更新应用程序日期)?我在将来更新行时不想创建更多开销.
公式I在试用结束日期的列定义中使用:
(dateadd(day,(-1),dateadd(month,(3),dateadd(day,(1)-datepart(day,[APP_DT]),[APP_DT]))))
Run Code Online (Sandbox Code Playgroud) 我有一个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) 我有一个叫做Cost返回钱的计算列.
我想要另一个返回(Cost * 2)的列,但它不允许我.
在处理VS 2010 SQL CLR项目和计算列时,MS似乎有一个错误.我正在使用Pre/PostDeployScript.sql来删除/添加计算列.但是,如果我尝试从VS2010部署它,我会遇到依赖性错误.同一项目在Vs2008中100%运行.我想知道我在部署解决问题方面的选择是什么?我也与MS有联系,但他们还没有找到解决方法/解决方案.
我想从数据库查询计算列的定义,但找不到似乎做我想要的命令...
例如,如果列定义为:
CallDT AS (CONVERT([datetime],dateadd(second,[StartDate],'01/01/1970'),(0)))
Run Code Online (Sandbox Code Playgroud)
在DDL中,我想在数据库上运行一个命令来检索"AS"语句,以便将其与预期值进行比较.(我正在开发一个将现有数据库与DDL定义进行比较的SQL解析器)...
这可能吗?
我有一个简单的表,其中包含一些数量和间隔,以秒为单位和产品名称.
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) 我有一个包含多列的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值的数据帧.
我一直试图理解为什么我的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) 关于我发布的上一个问题: 计算Spotfire中特定行的相同列的差异
我有一个新问题,下面是样本:
我想要实现的新功能是,
数据规则:
输出应该是这样的:
我试过的解决方案:
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:一些细节:
sql-server ×3
database ×2
dataframe ×2
pandas ×2
python ×2
deployment ×1
excel ×1
expression ×1
pivot-table ×1
spotfire ×1
sql ×1
sqlclr ×1
t-sql ×1