我有 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、存储过程、函数……我知道我会得到这个,但时间紧迫……
出于好奇,我仍然欢迎答案,但这就是我所做的。
我最终完全删除了 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 |
我知道这很简单......只是想会有一些更聪明/更有说服力的方法来做到这一点。