2016-09-14 110 views
1

到目前为止,我有一个cte查询,它返回一个结果,我想遍历结果集并根据类型列选择2个记录... 我可以为类型20返回2行,为类型21返回2行,为类型22返回2行记录等等......我已经尝试了几个函数,但总是返回2条记录而不是2条记录上述记录。谢谢如何遍历结果集并在结果集中返回每行N行

Acct Cde type AcctNbr 
123456 50 20 2345678 
123457 50 20 2345678 
123458 50 20 2345678 
123459 50 20 2345678 
123460 50 21 2345678 
123461 50 21 2345678 
123462 50 21 2345678 
123463 50 21 2345678 
123464 50 22 2345678 
123465 50 22 2345678 
123466 50 22 2345678 
123467 50 22 2345678 
123468 50 23 2345678 

我想返回至少每行类型2行。我用的CTE与 主查询和

回答

2

你不说你会如何选择你想要的两行,所以我任意选择通过科目订购。然后使用ROW_NUMBER函数按类型对行进行编号。

WTIH YourFirstCTE AS (
    -- Appropriate code goes here 
), 
cteRowNum AS (
    SELECT Acct, Cde, type, AcctNbr, 
      ROW_NUMBER() OVER(PARTITION BY type ORDER BY Acct) AS RowNum 
     FROM YourFirstCTE 
) 
SELECT Acct, Cde, type, AcctNbr 
    FROM cteRowNum 
    WHERE RowNum <= 2; 
+0

谢谢乔,我只是试过了,它的工作就像我想要的。我必须编辑代码以删除第二个“WITH”,因为这是多个CTE。再次感谢 – skinnyWill