【问题标题】:Ordering and grouping records together将记录排序和分组在一起
【发布时间】:2014-05-13 04:24:07
【问题描述】:

我有一个返回父子记录的查询。每条记录都有一个总金额字段。我正在尝试按总量对查询进行排序,但在父级别。子记录将立即显示在父记录下方

例如,如果我有以下情况

| RecordID | Parent   |    Total |

|123       |         1|       90 |

|235       |         0|       70 |

|123       |         0|      100 |

|235       |         1|       60 |

我从高到低排序,应该是这样的

RecordID    Parent    Total

| 123           | 1 |          90 |

| 123           | 0 |         100 |

| 235           | 1 |          60 |

| 235           | 0 |          70 |

我想我可能需要在每个组的选择查询中放置某种排序号,所以在这个例子中,RecordID 123 将被分配 1,记录 235 将被分配 2。

使用它,我可以按SortNumberParentTotal 进行排序。

有什么想法吗?

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    获取父值的简单self JOIN应该可以搞定;

    SELECT a.*
    FROM mytable a
    JOIN mytable b
      ON a.recordid=b.recordid
     AND b.parent=1
    ORDER BY b.total,b.recordid,a.parent DESC
    

    An SQLfiddle to test with.

    【讨论】:

    • 这是我在最初的帖子中所说的,也是我在您回复之前刚刚实施的内容。谢谢。
    【解决方案2】:

    recordid 排序有什么问题?

    select recordid, parent, total
    from yourtable
    order by recordid, parent desc, total
    

    【讨论】:

    • 我需要对父级的总金额进行排序。例如,Parent 123 比 parent 235 最高。记录 id 和总金额之间没有关系。
    • 如果您需要对“总金额”进行排序,那么您应该在示例输出中显示出来。答案中的 ORDER BY 似乎与您的示例输出完全匹配。您可能还需要显示您的表定义,因为您对record id 的评论似乎没有意义。 (如果“没有关系”,您如何期望它们显示在结果集中的同一行中?)您的示例输出似乎与您的书面描述相矛盾。
    猜你喜欢
    • 2018-01-11
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多