选择单独ID中的行,直到第一次出现给定值

时间:2016-03-27 09:18:46

标签: tsql sql-server-2012 reportbuilder3.0

我尝试获取每个单独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服务器。

我非常感谢任何建议。

马丁

1 个答案:

答案 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