从多行中获取单行

时间:2019-12-23 04:53:14

标签: sql sql-server case

简单的几天就挠头了,但是我不可能:(。我有这样的桌子

Server |  Domain | Department |UniqueID
--------------------------------------
A      |   abc   | HR         | 123
A      |   abc   | Acc        | 123
A      |   abc   | Other      | 123
B      |   efg   | HR         | 456
C      |   efg   | Acc        | 789

我想要这样的输出

Server |  Domain | Department |UniqueID
----------------------------------------
A      |   abc   | All Dept   | 123
B      |   efg   | HR         | 456
C      |   efg   | Acc        | 789

因此,如果有多个部门,则为“所有部门”。 请指教

3 个答案:

答案 0 :(得分:2)

您可以按Server ,Domain,UniqueID分组,然后使用if count > 1 then All Dept

select 
  Server ,Domain,case when count(1) > 1 then 'All Dept' else min(Department) end as Department,UniqueID
from T
group by Server ,Domain,UniqueID

答案 1 :(得分:1)

您可以使用GROUP BY和聚合函数COUNT()来获得结果。

SELECT 
  Server, 
  Domain, 
  CASE WHEN Count(UniqueID) > 1 THEN 'All Dept' ELSE MIN(Department) END as 'Department', 
  UniqueID
    FROM Dept
GROUP BY Server, Domain, UniqueID

更新:

SQL提琴:http://sqlfiddle.com/#!18/24f56/2

答案 2 :(得分:0)

我的一般方法是这样的:

a = ::f(a);