2015-09-30 6 views
3

Если у меня есть 4 строки в базе данных, подобные этим.Как получить фиксированное количество строк в sql

|____A____|____B_____| 
| a1 | b1 | 
| a2 | b2 | 
| a3 | b3 | 
| a4 | b4 | 

Но мне нужно, чтобы отобразить 10 строк по добавленной NO колонки, чтобы получить серийный номер для каждой строки, как эти

__NO__|____A____|____B_____| 
    1 | a1 | b1 | 
    2 | a2 | b2 | 
    3 | a3 | b3 | 
    4 | a4 | b4 | 
    5 |   |   | 
    6 |   |   | 
    7 |   |   | 
    8 |   |   | 
    9 |   |   | 
    10 |   |   | 

Как выполнить запрос на SQL Server?

ответ

7

Fiddle здесь: http://sqlfiddle.com/#!3/9a9dd/1

WITH CTE1 
AS 
(
    SELECT 1 AS [NO] 
    UNION ALL 
    SELECT [NO]+1 FROM CTE1 WHERE [NO]<10 
), 
CTE2 AS 
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN, A,B 
FROM YOURTABLE 
) 

SELECT C1.[NO],A,B 
FROM CTE1 C1 LEFT JOIN CTE2 C2 ON C1.[NO] = C2.RN 
+0

Это работа. Большое спасибо. –

1

Вот еще один способ без использования рекурсивного ОТВ и LEFT JOIN.

SQL Fiddle

;WITH Cte AS(
    SELECT 
     NO = ROW_NUMBER() OVER (ORDER BY A, B), A, B 
    FROM tbl 
    UNION ALL 
    SELECT 
     t.n, NULL, NULL 
    FROM (VALUES 
     (11), (12), (13), (14), (15), (16), (17), (18), (19), (20) 
    )t(n) 
), 
CteFinal AS(
    SELECT *, rn = ROW_NUMBER() OVER (ORDER BY NO) 
    FROM Cte 
) 
SELECT 
    rn AS NO, A, B 
FROM CteFinal 
WHERE rn < = 10 
Смежные вопросы