【问题标题】:How to add similar items in one using UNION query如何使用 UNION 查询将相似项目合二为一
【发布时间】:2021-06-14 23:05:33
【问题描述】:

当我使用 UNION 加入时,我目前在 2 个地方获得了类似的物品。

我想要的是它应该总结并显示相似项目的单个项目。

这是我的查询

select 
(Case 
When DHB = 'ABC.com' Then 'ABC Hospital'
When DHB = 'AOC.com' Then 'ABC Hospital'
When DHB = 'coe.com' Then 'EFG Hospital'
End) DHB
, count(*) NumberOfActiveUsers from (
select distinct Ltrim(Rtrim(substring(userid, charIndex('@', userId)+1, Len(userId)))) as DHB, userId from [RecordDB].[dbo].Event ae
where userId like '%@%'
) as Temp
where DHB in ('ABC.com','AOC.com','coe.com')
group by DHB

UNION

select distinct DHB,
 count(userid) NumberOfActiveUsers from (
SELECT DISTINCT userid,
CASE WHEN DHB in ('2.1','ABC001') THEN 'ABC Hospital'
     WHEN DHB in ('3.1','CDE001') THEN 'EFG Hospital'  
ELSE DHB END 
FROM 
(
SELECT 
    userid, 
    CASE 
       WHEN CHARINDEX('-', e.name) > 0 
          THEN Ltrim(Rtrim(substring(e.name,0, charIndex('-', e.name)))) 
       ELSE e.name 
    END as DHB      
FROM
    [RecordDB].[dbo].Event ae
JOIN
    [Portal].[dbo].cUser cu ON cu.name = ae.userID
JOIN
    [Portal].[dbo].UAttribute ua ON ua.cUser = cu.uniqueId
JOIN
    [Portal].[dbo].[EIdentifier] ei ON ei.cUser = cu.uniqueId
JOIN
    [Portal].[dbo].[EIdentifierType] e ON e.uniqueId = ei.externalIdentifierType
WHERE
    (e.name LIKE '%ABC001%' OR e.name LIKE '2.1' or e.name LIKE '%CDE001%' OR e.name LIKE '3.1')   
) as aa
)as Temp2
group by DHB

输出

DHB            NumberOfActiveUsers
ABC Hospital           2
ABC Hospital           5
EFG Hospital           3
EFG Hospital           8

预期的输出应该是

DHB            NumberOfActiveUsers
 ABC Hospital          7
 EFG Hospital          11

【问题讨论】:

  • 添加一个具有分组依据的外部查询查询。
  • 嗨@DaleK,你能告诉我怎么做吗?谢谢
  • 仅供参考:DISTINCT 不会提供所需的结果,因为您需要 SUM。因此使用GROUP BY。
  • @DaleK,非常感谢您的宝贵指导!我现在让它工作了。
  • @DaleK,我做了select DHB, SUM(NumberOfActiveUsers ) NumberOfActiveUsers from(...)t group by DHB。

标签: sql sql-server tsql union


【解决方案1】:

快速而肮脏的解决方案:

select distinct * from (
  select * from part1
  union all
  select * from part2
) t;

(这是 cmets 中建议的 group by 的替代方案,这是另一种有效的,也许是等效的途径。)

编辑 1 正如 cmets 中所写,这种“快速而肮脏”的做事方式不起作用,因为 OP 需要聚合函数 SUM。按 DHB 分组,我相信这会起作用:

select DHB, SUM(NumberOfActiveUsers) as NumberOfActiveUsers
from (
      select /*your first statement*/ from part1
      union all
      select /*your second statement*/ from part2
) t;

【讨论】:

  • OP 需要SUM,因此DISTINCT 不起作用。
  • 你是对的,我的错。我应该删除我的答案吗?
  • 只需按解决方案添加组。
猜你喜欢
  • 1970-01-01
  • 2021-11-14
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-04
相关资源
最近更新 更多