获取每个组的前5条记录,并在每个组的行中将它们串联

哈西尔·多希

我有一张Contacts基本上如下所示的表

Id | Name | ContactId |  Contact   | Amount
---------------------------------------------
1  |  A   |     1     | 12323432   |  555
---------------------------------------------
1  |  A   |     2     | 23432434   |  349
---------------------------------------------
2  |  B   |     3     | 98867665   |  297
--------------------------------------------
2  |  B   |     4     | 88867662   |  142
--------------------------------------------
2  |  B   |     5     |   null     |  698
--------------------------------------------

在这里,ContactId整个表格都是唯一的。Contact可以是NULL&我想排除那些。

现在,我想根据其ID为每个ID选择排名前5位的联系人Amount我通过以下查询来完成:

 WITH cte AS (
    SELECT id, Contact, amount, ROW_NUMBER() 
    over (
        PARTITION BY id
        order by amount desc
    ) AS RowNo 
    FROM contacts
    where contact is not null
)
select *from cte where RowNo <= 5

到目前为止,一切正常。现在,我想将每个组的这些记录(<= 5)串联起来,并通过串联将它们显示在一行中。

预期结果 :

 Id | Name | Contact
-------------------------------
  1  |  A   | 12323432;23432434   
-------------------------------
  2  |  B   | 98867665;88867662   

我正在使用以下查询来实现这一点,但它仍然在单独的行中提供所有记录,并且还包括Null值:

WITH cte AS (
    SELECT id, Contact, amount,contactid, ROW_NUMBER() 
    over (
        PARTITION BY id
        order by amount desc
    ) AS RowNo 
    FROM contacts
    where contact is not null
)
select *from id, name, 
STUFF ((
          SELECT distinct  '; ' + isnull(contact,'')   FROM cte 
          WHERE co.id= cte.id and co.contactid= cte.contactid
          and RowNo <= 5
 FOR XML PATH('')),1, 1, '')as contact
 from contacts co inner join cte where cte.id = co.id and co.contactid= cte.contactid

上面的查询仍然为我提供了差异行中的所有前5位联系人,也包括null。

使用CTESTUFF聚在一起是个好主意吗?请提出是否有比此更好的方法。

哈西尔·多希

我的最终查询出现问题:

我不需要Contact在决赛中使用原始表格Select,因为我已经拥有所需的所有东西CTE另外,Inside STUFF(),我正在使用contactid加入,这实际上是我在这里尝试进行的连接。由于我使用该条件进行联接,因此我在diff行中获取记录。我已经删除了这两个条件,并且它起作用了。

WITH cte AS (
    SELECT id, Contact, amount,contactid, ROW_NUMBER() 
    over (
        PARTITION BY id
        order by amount desc
    ) AS RowNo 
    FROM contacts
    where contact is not null
)
select *from id, name, 
STUFF ((
          SELECT distinct  '; ' + isnull(contact,'')   FROM cte 
          WHERE co.id= cte.id              
          and RowNo <= 5
 FOR XML PATH('')),1, 1, '')as contact
 from  cte where rowno <= 5

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从每个组中选择前n条记录

来自分类Dev

从每个组中选择前15条记录

来自分类Dev

访问中每个组sql的前n条记录

来自分类Dev

获取每个组的第一条记录的列表

来自分类Dev

获取每个组的第一条记录

来自分类Dev

如何使用BigQuery获取每个记录组的最后3条记录的平均值?

来自分类Dev

如何通过获取每个组中的最后一条记录来删除重复的记录

来自分类Dev

从MYSQL的每个组中获取头条记录

来自分类Dev

通过SQL获取每个组的最新记录

来自分类Dev

Laravel 获取每个组的最新记录

来自分类Dev

在SQL中将行追加到每个组

来自分类Dev

不了解查询如何从每个组中检索前n条记录

来自分类Dev

Google Spreadsheet Queries:如何获取每个组的第一条记录?

来自分类Dev

如何在mongodb中获取每个组的最新N条记录?

来自分类Dev

从每个组获取第一条记录,而无需使用ROW_NUMBER()或RANK()

来自分类Dev

Google Spreadsheet Queries:如何获取每个组的第一条记录?

来自分类Dev

如何通过使用mysql降序获得每个组的5条记录?

来自分类Dev

MYSQL-选择每个库存组的最新3条记录

来自分类Dev

Mysql为每个组选择最近的2条记录[用户]

来自分类Dev

共享相同标题的组文件然后将它们串联

来自分类Dev

如何从ActiveRecord中的每个组获取最新记录?

来自分类Dev

如何在mongodb中获取每个组的最新记录?

来自分类Dev

获取每个组的天数差异

来自分类Dev

使用PowerShell从每个组中选择前5个项目

来自分类Dev

遍历每个组并减去它们的值

来自分类Dev

在JPA中按所需顺序对每个组的子行进行排序,并在每个组中获取所需的顶行数

来自分类Dev

在EntityFramework中的每个组中选择前n行

来自分类Dev

返回每个组的前N行(Vertica / vsql)

来自分类Dev

在EntityFramework中的每个组中选择前n行

Related 相关文章

  1. 1

    从每个组中选择前n条记录

  2. 2

    从每个组中选择前15条记录

  3. 3

    访问中每个组sql的前n条记录

  4. 4

    获取每个组的第一条记录的列表

  5. 5

    获取每个组的第一条记录

  6. 6

    如何使用BigQuery获取每个记录组的最后3条记录的平均值?

  7. 7

    如何通过获取每个组中的最后一条记录来删除重复的记录

  8. 8

    从MYSQL的每个组中获取头条记录

  9. 9

    通过SQL获取每个组的最新记录

  10. 10

    Laravel 获取每个组的最新记录

  11. 11

    在SQL中将行追加到每个组

  12. 12

    不了解查询如何从每个组中检索前n条记录

  13. 13

    Google Spreadsheet Queries:如何获取每个组的第一条记录?

  14. 14

    如何在mongodb中获取每个组的最新N条记录?

  15. 15

    从每个组获取第一条记录,而无需使用ROW_NUMBER()或RANK()

  16. 16

    Google Spreadsheet Queries:如何获取每个组的第一条记录?

  17. 17

    如何通过使用mysql降序获得每个组的5条记录?

  18. 18

    MYSQL-选择每个库存组的最新3条记录

  19. 19

    Mysql为每个组选择最近的2条记录[用户]

  20. 20

    共享相同标题的组文件然后将它们串联

  21. 21

    如何从ActiveRecord中的每个组获取最新记录?

  22. 22

    如何在mongodb中获取每个组的最新记录?

  23. 23

    获取每个组的天数差异

  24. 24

    使用PowerShell从每个组中选择前5个项目

  25. 25

    遍历每个组并减去它们的值

  26. 26

    在JPA中按所需顺序对每个组的子行进行排序,并在每个组中获取所需的顶行数

  27. 27

    在EntityFramework中的每个组中选择前n行

  28. 28

    返回每个组的前N行(Vertica / vsql)

  29. 29

    在EntityFramework中的每个组中选择前n行

热门标签

归档