如何在没有聚合的情况下按列分组?
How to group by a column without aggregate?
我有一个 table“table1”,如下所示,其中包含有关捐款的数据,例如捐款承诺及其付款等。这些将包括承诺,他们的承诺付款以及还有个人付款捐款,如最后 3 行所示:
ID Type Amount Date ParentID Application
-----------------------------------------------------------------------------
10 Pledge 50000 1/2/2020 50 Donation
20 Pledge 20000 5/2/2019 100 Donation
30 Payment 10000 2/1/2020 50 Pledge
40 Payment 15000 3/2/2020 50 Pledge
50 Payment 25000 4/5/2020 50 Pledge
60 Payment 10000 5/9/2019 100 Pledge
70 Payment 10000 6/8/2019 100 Pledge
80 Payment 5000 10/5/2020 200 Donation
90 Payment 9000 12/5/2019 250 Donation
100 Payment 8000 1/1/2020 230 Donation
我正在尝试按 Date 按 DESC 顺序排序,如下所示:
SELECT *
FROM table1
ORDER BY
Date DESC,
CASE WHEN Type = 'Pledge' THEN 1 ELSE 0 END DESC,
CASE WHEN Type = 'Payment' AND Application = 'Pledge' THEN 1 ELSE 0 END DESC,
Amount
这似乎是 return 想要的结果,但我还想确保所有相关交易始终彼此相邻分组。
例如,所有相关交易将始终具有与 table 示例中相同的 ParentID
。我尝试在 ORDER BY
子句之前添加一个 GROUP BY ParentID
,但出现错误“未包含在聚合函数中”。
有没有其他不使用 GROUP BY 的方法,这样我就可以像现在一样使用 ORDER BY,而且还添加逻辑以确保基于 ParentID 的所有相关交易始终在下一个分组对彼此?
期望的结果如下所示。基本上,认捐应该始终排在第一位,然后按照日期降序顺序进行相应的付款。任何不相关的个人付款然后按日期的降序排列:
ID Type Amount Date ParentID Application
-----------------------------------------------------------------------------
10 Pledge 50000 1/2/2020 50 Donation
50 Payment 25000 4/5/2020 50 Pledge
40 Payment 15000 3/2/2020 50 Pledge
30 Payment 10000 2/1/2020 50 Pledge
20 Pledge 20000 5/2/2019 100 Donation
70 Payment 10000 6/8/2019 100 Pledge
60 Payment 10000 5/9/2019 100 Pledge
80 Payment 5000 10/5/2020 200 Donation
100 Payment 8000 1/1/2020 230 Donation
90 Payment 9000 12/5/2019 250 Donation
在 ORDER BY
中使用 parentid
。
...
ORDER BY parentid ASC,
type DESC,
date DESC
...
我有一个 table“table1”,如下所示,其中包含有关捐款的数据,例如捐款承诺及其付款等。这些将包括承诺,他们的承诺付款以及还有个人付款捐款,如最后 3 行所示:
ID Type Amount Date ParentID Application
-----------------------------------------------------------------------------
10 Pledge 50000 1/2/2020 50 Donation
20 Pledge 20000 5/2/2019 100 Donation
30 Payment 10000 2/1/2020 50 Pledge
40 Payment 15000 3/2/2020 50 Pledge
50 Payment 25000 4/5/2020 50 Pledge
60 Payment 10000 5/9/2019 100 Pledge
70 Payment 10000 6/8/2019 100 Pledge
80 Payment 5000 10/5/2020 200 Donation
90 Payment 9000 12/5/2019 250 Donation
100 Payment 8000 1/1/2020 230 Donation
我正在尝试按 Date 按 DESC 顺序排序,如下所示:
SELECT *
FROM table1
ORDER BY
Date DESC,
CASE WHEN Type = 'Pledge' THEN 1 ELSE 0 END DESC,
CASE WHEN Type = 'Payment' AND Application = 'Pledge' THEN 1 ELSE 0 END DESC,
Amount
这似乎是 return 想要的结果,但我还想确保所有相关交易始终彼此相邻分组。
例如,所有相关交易将始终具有与 table 示例中相同的 ParentID
。我尝试在 ORDER BY
子句之前添加一个 GROUP BY ParentID
,但出现错误“未包含在聚合函数中”。
有没有其他不使用 GROUP BY 的方法,这样我就可以像现在一样使用 ORDER BY,而且还添加逻辑以确保基于 ParentID 的所有相关交易始终在下一个分组对彼此?
期望的结果如下所示。基本上,认捐应该始终排在第一位,然后按照日期降序顺序进行相应的付款。任何不相关的个人付款然后按日期的降序排列:
ID Type Amount Date ParentID Application
-----------------------------------------------------------------------------
10 Pledge 50000 1/2/2020 50 Donation
50 Payment 25000 4/5/2020 50 Pledge
40 Payment 15000 3/2/2020 50 Pledge
30 Payment 10000 2/1/2020 50 Pledge
20 Pledge 20000 5/2/2019 100 Donation
70 Payment 10000 6/8/2019 100 Pledge
60 Payment 10000 5/9/2019 100 Pledge
80 Payment 5000 10/5/2020 200 Donation
100 Payment 8000 1/1/2020 230 Donation
90 Payment 9000 12/5/2019 250 Donation
在 ORDER BY
中使用 parentid
。
...
ORDER BY parentid ASC,
type DESC,
date DESC
...