2017-06-06 56 views
0

我正在构建报表,其中显示了不同部门中一个工单的各个部分。 考虑下面以特定方式对数据进行分组

work_order part dept_code datein 
aaaa  11 XXX  20/01/2017 
aaaa  12 BBB  22/01/2017 
bbbb  12 XXX  20/01/2017 
bbbb  15 XXX  22/01/2017 
cccc  13 XXX  20/01/2017 
cccc  17 XYX  20/01/2017 

表现在我想组中,只有工作才能与不同dept_code应该出现这样的方式这个数据。 结果

work_order part dept_code datein 
aaaa  11 XXX  20/01/2017 
aaaa  12 BBB  22/01/2017 
cccc  13 XXX  20/01/2017 
cccc  17 XYX  20/01/2017 

回答

2

使用标识那些work_order项目其中的部门数大于1的子查询:在

select * from work 
where work_order in 
    (select work_order 
    from work w2 
    group by w2.work_order 
    having count(w2.dept_code) > 1 
) 
2

像这样的事情

SELECT work_order, part, dept_code, datein 
FROM [Table] 
WHERE work_order in 
(
    SELECT work_order 
    FROM [Table] 
    GROUP BY work_order 
    HAVING COUNT(DISTINCT dept_code) > 1 
) 
+0

为什么使用'distinct work_order'? 'GROUP BY work_order'无论如何都会产生独特的work_orders,而不是? –

+1

好点,我修改了答案。 – Simon

2

你可以使用count() ()如下:

Select * from (
    Select *, cnt = Count(dept_code) over(partition by work_order, dept_code) from yourTable ) a 
    Where a.cnt = 1 
+1

窗口函数中'distinct'不起作用。 –

相关问题