我尝试获取每个单独ID中的所有行,直到第一次出现给定值,在本例中为“CR”,但必须颠倒行的顺序。以下是数据存储在表格中的方式:
ID DebtMth YearMth Status Balance
1 5 2015-02 DR 10.00
1 4 2015-03 DR 10.00
1 3 2015-04 CR 00.00
1 2 2015-06 DR 10.00
1 1 2015-07 DR 10.00
2 10 2011-01 DR 20.00
2 9 2011-02 DR 20.00
2 8 2011-03 CR 20.00
3 11 2012-02 DR 30.00
3 10 2012-03 DR 30.00
3 8 2012-05 CR 00.00
3 7 2012-06 CR 00.00
3 6 2012-07 DR 30.00
我需要颠倒顺序,以便每个ID组中的最后一行成为第一行,依此类推。所以表格的排序如下。
ID DebtMth YearMth Status Balance
1 1 2015-07 DR 10.00
1 2 2015-06 DR 10.00
1 3 2015-04 CR 00.00
1 4 2015-03 DR 10.00
1 5 2015-02 DR 10.00
2 8 2011-03 CR 20.00
2 9 2011-02 DR 20.00
2 10 2011-01 DR 20.00
3 6 2012-07 DR 30.00
3 7 2012-06 CR 00.00
3 8 2012-05 CR 00.00
3 10 2012-03 DR 30.00
3 11 2012-02 DR 30.00
现在我需要在每个ID组中选择行,直到Status为'CR'并排除第一行为'CR'的任何ID。所以输出看起来像这样。
ID DebtMth YearMth Status Balance
1 1 2015-07 DR 10.00
1 2 2015-06 DR 10.00
3 6 2012-07 DR 30.00
我正在使用报表生成器3中的查询设计器连接到Microsoft SQL2012服务器。
我非常感谢任何建议。
马丁
答案 0 :(得分:0)
SELECT
id , DebtMth , YearMth , Status , Balance
FROM
(
SELECT
*
, MAX(CASE WHEN status = 'CR' THEN YearMth END) OVER(PARTITION BY id) AS first_cr_yearMth
FROM YourTable
) AS T
WHERE YearMth > first_cr_yearMth OR first_cr_yearMth IS NULL