SQL Server分组数据

发布于 2025-02-02 22:28:25 字数 909 浏览 2 评论 0原文

我们的一个日志表中的一个结果如下所示,

Unique__Nm  reviewer 1    reviewer 2    reviewer 3
--------------------------------------------------
  859          NULL          NULL        Joel
  859          NULL         Joseph       NULL
  859         Antony         NULL        NULL
  163         Robert         NULL        NULL
  163          NULL         Joseph       NULL
  164          NULL         Andrew       NULL
  896          NULL          karry       NULL

我需要根据唯一数字对数据进行分组,并且提取结果像以下

Unique__Num  reviewer 1   reviewer 2    reviewer 3
------------------------------------------------
859            Antony     Joseph        Joel
163            Robert     Joseph        NULL
164            NULL       Andrew        NULL
896            NULL       Kerry         NULL

人可以提供帮助吗?

One of our log table got result like below

Unique__Nm  reviewer 1    reviewer 2    reviewer 3
--------------------------------------------------
  859          NULL          NULL        Joel
  859          NULL         Joseph       NULL
  859         Antony         NULL        NULL
  163         Robert         NULL        NULL
  163          NULL         Joseph       NULL
  164          NULL         Andrew       NULL
  896          NULL          karry       NULL

I need to group data based on Unique number and extract result like below

Unique__Num  reviewer 1   reviewer 2    reviewer 3
------------------------------------------------
859            Antony     Joseph        Joel
163            Robert     Joseph        NULL
164            NULL       Andrew        NULL
896            NULL       Kerry         NULL

Can someone help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

那些过往 2025-02-09 22:28:25

如果您的输入是:

Unique__Nm  reviewer 1    reviewer 2    reviewer 3
--------------------------------------------------
  859          NULL          NULL        Joel
  859          NULL         Joseph       NULL
  859         Antony         NULL        NULL
  859          NULL         Edmund       NULL

输出中应该是评论者2什么?

如果完全可以使用这种输入,则应指定应该发生的事情,即。我们应该作为Rewiever 2得到什么。

否则这将完成工作:

SELECT Unique__Nm, max([reviewer 1]), max([reviewer 2]), max([reviewer 3])
  FROM table
 GROUP BY Unique__Nm;

What if your input is like:

Unique__Nm  reviewer 1    reviewer 2    reviewer 3
--------------------------------------------------
  859          NULL          NULL        Joel
  859          NULL         Joseph       NULL
  859         Antony         NULL        NULL
  859          NULL         Edmund       NULL

What should be reviewer 2 in the output?

If such input is possible at all, you should specify what should happen, ie. what should we get as rewiever 2.

Otherwise this will do the work:

SELECT Unique__Nm, max([reviewer 1]), max([reviewer 2]), max([reviewer 3])
  FROM table
 GROUP BY Unique__Nm;
满地尘埃落定 2025-02-09 22:28:25

您的数据

CREATE TABLE test(
   Unique_Nm INTEGER  NOT NULL
  ,[reviewer 1] VARCHAR(60)
  ,[reviewer 2] VARCHAR(60)
  ,[reviewer 3] VARCHAR(60)
);
INSERT INTO test
(Unique_Nm,[reviewer 1],[reviewer 2],[reviewer 3]) VALUES 
(859,NULL,NULL,'Joel'),
(859,NULL,'Joseph',NULL),
(859,'Antony',NULL,NULL),
(163,'Robert',NULL,NULL),
(163,NULL,'Joseph',NULL),
(164,NULL,'Andrew',NULL),
(896,NULL,'karry',NULL);

使用提供String_agg提供更好的情况,而每个unique_nm存在两个[reviwer],并且它将concat它们,此外,它掩盖了null值。

select Unique_Nm,
string_agg([reviewer 1],',') [reviewer 1],
string_agg([reviewer 2],',') [reviewer 2],
string_agg([reviewer 3],',') [reviewer 3]
from test
group by Unique_Nm

但是,使用max也可能

select Unique_Nm,
MAX([reviewer 1]) [reviewer 1],
MAX([reviewer 2]) [reviewer 2],
MAX([reviewer 3]) [reviewer 3]
from test
group by Unique_Nm

Your data

CREATE TABLE test(
   Unique_Nm INTEGER  NOT NULL
  ,[reviewer 1] VARCHAR(60)
  ,[reviewer 2] VARCHAR(60)
  ,[reviewer 3] VARCHAR(60)
);
INSERT INTO test
(Unique_Nm,[reviewer 1],[reviewer 2],[reviewer 3]) VALUES 
(859,NULL,NULL,'Joel'),
(859,NULL,'Joseph',NULL),
(859,'Antony',NULL,NULL),
(163,'Robert',NULL,NULL),
(163,NULL,'Joseph',NULL),
(164,NULL,'Andrew',NULL),
(896,NULL,'karry',NULL);

using provide String_agg provide better situation where exist two [reviwer] per Unique_Nm and it will concat them, In addition, it mask null values.

select Unique_Nm,
string_agg([reviewer 1],',') [reviewer 1],
string_agg([reviewer 2],',') [reviewer 2],
string_agg([reviewer 3],',') [reviewer 3]
from test
group by Unique_Nm

however using Max is also possible

select Unique_Nm,
MAX([reviewer 1]) [reviewer 1],
MAX([reviewer 2]) [reviewer 2],
MAX([reviewer 3]) [reviewer 3]
from test
group by Unique_Nm

dbfiddle

小镇女孩 2025-02-09 22:28:25

如果所有审阅者1,<代码>审阅者2 和审阅者3列可以具有只有一个不为null > unique__nm ,您可以使用Simple Coceceunique_nm值分组的列,例如

SELECT 
    Unique__Nm, 
    COALESCE([reviewer 1]) as [reviewer 1], 
    COALESCE([reviewer 2]) as [reviewer 2], 
    COALESCE([reviewer 3]) as [reviewer 3] 
FROM table 
GROUP BY Unique__Nm

If all of reviewer 1, reviewer 2 and reviewer 3 columns can have only one not null value per Unique__Nm, you can use simple coalesce per column grouped by Unique_Nm values, e.g.

SELECT 
    Unique__Nm, 
    COALESCE([reviewer 1]) as [reviewer 1], 
    COALESCE([reviewer 2]) as [reviewer 2], 
    COALESCE([reviewer 3]) as [reviewer 3] 
FROM table 
GROUP BY Unique__Nm
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文