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)  
);