如何汇总发送给每个用户的笔记数量?

时间:2018-09-25 13:30:05

标签: sql-server tsql sql-server-2014

请考虑以下表格

group (obj_id here is user_id)

group_id    obj_id    role
--------------------------
100         1         A
100         2         root
100         3         B
100         4         C

notes

obj_id      ref_obj_id    note      note_id
-------------------------------------------
1           2                       10
1           3                       10
1           0             foobar    10
1           4                       20
1           2                       20
1           0             barbaz    20
2           0             caszes    30
2           1                       30
4           1                       70
4           0             taz       70
4           3                       70

注意:系统中的注释可以分配给多个用户(例如:管理员可以写“向2个用户发送警告”并将其链接到2个user_id)。笔记链接到的第一个用户与其他链接的用户的存储方式不同。注释本身仅链接到第一个链接的用户。每当group.obj_id = notes.obj_id然后ref_obj_id = 0note <> null

我需要概述每个用户的notes。通常,我会通过加入group.obj_id = notes.obj_id来做到这一点,但由于ref_obj_id0(在这种情况下,我应该加入notes.obj_id)在这里出现了错误

此系统中有4个音符(foobar,barbaz,casze和taz)。

所需的输出是:

obj_id  user_is_primary notes_primary  user_is_linked  notes_linked
-------------------------------------------------------------------
1       2               10;20          2               30;70                  
2       1               30             2               10;20
3       0                              2               10;70
4       1               70             1               20

如何获得此汇总结果?

我希望我能够清楚地说明情况;也许这是我的经验不足,但是我发现数据模型不是最简单的。

1 个答案:

答案 0 :(得分:1)

您不能简单地将其放在联接的ON子句中吗?

case when notes.ref_obj_id = 0 then notes.obj_id else notes.ref_obj_id end = group.obj_id