加入分组查询的单个记录

问题描述 投票:0回答:1

我有 2 个源表——GroupEvent 和 GroupEventAttendance。

GroupEvent 看起来像这样:

事件ID 说明
1 Event1-SubEventA
2 Event1-SubEventB
3 Event2-SubEventA
4 Event2-SubEventB

GroupEventAttendance:

事件ID 人号
1 12
1 13
2 15
2 16
3 18
3 19
4 21
4 22

这两个表连接但是 EventID BUT...

我需要在各种条件下合并源表中的groupEvents。我有一个标量值函数,结合 Group By 查询——看起来像这样:

SELECT 'G-' + STRING_AGG(CAST(EventID AS varchar(10)),'-') AS mergedEventID, 
dbo.fnGetGroupName(Notes,Description) AS Group_name
FROM GroupEvent
GROUP BY dbo.fnGetGroupName(Notes,Description)

这会产生如下所示的结果:

mergedEventID 组名
1-2 活动1
3-4 活动2

现在...我需要根据原来的EventID加入GroupEventAttendance表...不能在Group By表中。

GroupEventAttendance 表所需的输出如下所示:

事件ID 人号
1-2 12
1-2 13
1-2 15
1-2 16
3-4 18
3-4 19
3-4 21
3-4 22

对于链接 GroupEventAttendance 以拉取合并的 eventID 的最优雅方式有什么建议吗?

考虑 CTE、存储过程、函数……我知道我会得到这个,但时间紧迫……

sql join group-by aggregate common-table-expression
1个回答
0
投票

出于好奇,我仍然欢迎答案,但这就是我所做的。

我最终完全删除了 Group By 并使用不带空格的 GroupName 作为 mergedEventID。

SELECT DISTINCT REPLACE(dbo.fnGetGroupName(Notes,Description),' ','') AS Group_id

,事件ID

,dbo.fnGetRemindGroupName(Notes,Description) AS group_name

来自 GroupEvent WHERE {条件}

这允许包含 EventID 并可用于加入 EventAttendance 表。输出看起来像这样:

MergedEventID 组名 OriginalEventID
事件1名称 活动一 1
事件1名称 活动一 2
事件名称 活动二 3
事件名称 活动二 4

我知道这很简单......只是想会有一些更聪明/更有说服力的方法来做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.