(已编辑)使用Count()函数时,在复制结果时出现问题,然后按从Null变为具有值的列进行分组。见下文:
这是数据的示例表:
t_order_table
Line# Order User_Assigned
1 12345 Null
2 12345 Null
3 12345 Null
4 12345 Null
5 12345 Null
6 12345 Null
7 12345 Null
8 12345 Null
9 12345 Null
1 11223 Null
2 11223 Null
3 11223 Null
以下是要在表格上报告的脚本(如下):
Select Order,
(Select Count(Line#) from t_order_table ord
Where User_Assigned is null
and o.Order = ord.Order) as 'Open Lines',
(Select Count(Line#) from t_order_table ord
Where User_Assigned is not null
and o.Order = ord.Order) as 'Picked Lines',
(Select User_Assigned from t_order_table ord
Where o.Order = ord.Order) as 'User Assigned'
from t_order_table o
Group By Order, User_Assigned
返回哪个:
Order Open Lines Picked Lines User_Assigned
12345 9 0 Null
11223 3 0 Null
当工人登录系统时,他会在接订单时一个接一个地分配给生产线。在他选择3行之后,表格将如下所示:
t_order_table
Line# Order User_Assigned
1 12345 Chris
2 12345 Chris
3 12345 Chris
4 12345 Null
5 12345 Null
6 12345 Null
7 12345 Null
8 12345 Null
9 12345 Null
1 11223 Null
2 11223 Null
3 11223 Null
报告将如下所示:
Order Open Lines Picked Lines User_Assigned
12345 9 3 Null
12345 9 3 Chris
11223 3 0 Null
结果具有重复的记录,因为“ User_Assigned”的SubSelect查询找到了一个空值和一个用户,因此有两个记录。我希望有一些逻辑可以检查是否分配了用户,它返回用户,否则返回null。我不知道该怎么做。谢谢您的帮助!!!
答案 0 :(得分:0)
这似乎可以满足您的需求。
set transaction isolation level read uncommitted;
declare @OrderTable as table
(
[Line] tinyint,
[Order] int,
[User_Assigned] nvarchar(50)
);
insert into @OrderTable
(
[Line],
[Order],
[User_Assigned]
)
values
(1, 12345, 'Chris'),
(2, 12345, 'Chris'),
(3, 12345, 'Chris'),
(4, 12345, null),
(5, 12345, null),
(6, 12345, null),
(7, 12345, null),
(8, 12345, null),
(9, 12345, null),
(1, 11223, null),
(2, 11223, null),
(3, 11223, null);
select
o.[Order],
sum(iif(o.User_Assigned is null, 1, 0)) as [OpenLines],
sum(iif(o.User_Assigned is not null, 1, 0)) as [PickedLines],
max(o.User_Assigned) as [User_Assigned]
from @OrderTable as [o]
group by
o.[Order]
返回:
Order OpenLines PickedLines User_Assigned
11223 3 0 NULL
12345 6 3 Chris