Sql 基于数组公式填充空值
新用户,请提前为格式错误道歉 基本上,我试图做的是能够填充Sql 基于数组公式填充空值,sql,sql-server,Sql,Sql Server,新用户,请提前为格式错误道歉 基本上,我试图做的是能够填充staff\u hours列,其中它等于NULL,并且有一个值不是NULL。正如您从屏幕截图中看到的,只有一个人在一个开放的cl\u hole\u staffing\u no中工作,因此将有start\u dt(随时间)和end\u dt(随时间)以及staff\u hours。16个人被安排轮班,第15排的人接受了这里正在发生的事情 理想的输出应该是staff_hours列,该列填充了一个人最终从事公开工作的时间量,因此在本例中为24.
staff\u hours
列,其中它等于NULL,并且有一个值不是NULL。正如您从屏幕截图中看到的,只有一个人在一个开放的cl\u hole\u staffing\u no
中工作,因此将有start\u dt
(随时间)和end\u dt
(随时间)以及staff\u hours
。16个人被安排轮班,第15排的人接受了这里正在发生的事情
理想的输出应该是staff_hours
列,该列填充了一个人最终从事公开工作的时间量,因此在本例中为24.00。我怎样才能写出一个公式来做到这一点?我在想Excel中的数组函数,但不知道如何在SQL中实现
[pre]
代码(vb):
A、B、C
1×10×X
2年11月
3 12 Y Z
4 13 B
5 14 B
6 15 Z
[pre]
假设列A中的行名为“datarange”
你的标准是C1:C3
下面的公式将返回一个数组{10,12,15}
=SMALL(COUNTIF(C1:C3,B1:B6)*数据范围,行(索引(A:A,SUMPRODUCT(--(COUNTIF(C1:C3,B1:B6)=0))+1):索引(A:A,行(数据范围)))
COUNTIF(C1:C3,B1:B6)*数据范围返回{10;0;12;0;0;15}
段行(索引(…):索引(…)返回{4;5;6},指示非零值的数量
然后,SMALL()函数返回第四个最小值、第五个最小值和第六个最小值
这种方法的一个缺点是会得到一个已排序的子列表。也许这对你有用。你的解释对你真正想要实现的目标有点困惑。然而,我认为您真正想要的只是填充员工工作时数列,这可以通过以下方式实现:
UPDATE
your_table_name
SET
staff_hours = 24
WHERE
staff_hours is NULL;
编辑 我现在明白了。您希望使用这两个日期进行操作,并提取它们之间的小时数。因为您在sql server中,所以实际上可以定义一个计算列,在该列中可以使用其他列中的值来计算所需的值 您需要再次创建表。(以下示例仅包含其工作所需的属性)
现在,每次您在表中插入一条同时包含员工开始时间\u dt和员工结束时间\u dt的记录时,员工工作时间列将自动计算这两个日期之间的小时数。如果您确定每个
员工工作时间\u no
只有一人填写,然后可能是max(员工工作时数)
(按cl\u hole\u staffing\u no划分)。结果不清楚您想要什么。
CREATE TABLE your_table_name
( id INT IDENTITY (1,1) NOT NULL
, staff_start_dt DATETIME
, staff_end_dt DATETIME
, staff_hours AS DATEDIFF(hh, staff_start_dt , staff_end_dt)
);