2016-03-10 34 views
1

即使表格只有6個可用記錄,我也想獲得14行查詢結果。SQL select返回定義的行數

例如,表格只有6條記錄,所以我想做一個SELECT,並且輸出將帶有8個空白行的6條記錄。

像這樣:

|trackings | 
--------------- 
|track1  | 
|track2  | 
|track3  | 
|track4  | 
|track5  | 
|track6  | 
| *blank* | 
| *blank* | 
| *blank* | 
| *blank* | 
| *blank* | 
| *blank* | 
| *blank* | 
| *blank* | 

我在谷歌搜索如何實現這一點,但我無法找到最好的標籤,找到它,我讀了一些例子與UNION但在這種情況下超過1空白或自定義行。

請注意,表中的記錄可能會改變,但我只需要14行。這些可以是14行的數據,或者根據情況可以是空白的。

感謝和抱歉我的英語!

+1

我真的很好奇你爲什麼要打結果集。這樣做背後的商業目的是什麼? – squillman

+0

閱讀本文http://stackoverflow.com/questions/29487482/how-to-add-blank-rows-when-select-query-sql –

+0

我需要做一個特定的報告,所以在佈局只適合14行,所以如果我只得到沒有空白的數據行,頁腳就會移動到頂端,並且想法是打印所有14行。 –

回答

0

你可能最好在你的應用程序層實現它,但是,如果你想在SQL中這樣做,你可以使用CTE來實現這一點。第一個CTE創建了14個空記錄,在第二個CTE中,這些空記錄與您的查詢結果相結合,並且在最終查詢中,前14個結果被選中排序頂部的非空記錄:

WITH cte 
    AS (SELECT 0 AS Id , 
       ' ' AS EmptyData 
     UNION ALL 
     SELECT Id + 1 AS Id , 
       EmptyData 
     FROM cte 
     WHERE Id < 14 
     ), 
    cte2 
    AS (SELECT 1 AS SortOrder , 
       trackings 
     FROM dbo.data 
     UNION ALL 
     SELECT 2 AS SortOrder , 
       EmptyData 
     FROM cte 
     ) 
SELECT TOP 14 
     trackings 
FROM cte2 
ORDER BY SortOrder 

這種方法的優點是,您可以輕鬆更改記錄的總數,只需用另一個數字替換兩個出現的14。

+0

哇!這個查詢就像一個魅力一樣,我不是設計報告的人,也許我會在報告設計器上搜索如何實現這一點,但在這裏我只是提出一些疑問;)。 謝謝大家! –

2

如果您不在乎行是否爲空,您可以生成行。下面是使用outer apply的方法:

with t as (
     select t.*, row_number() over (select null) as seqnum 
     from t 
    ) 
select t.* 
from (values (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14) 
    ) n(n) left join 
    t 
    on t.n = n.n; 

您可以使用一個數字表或子查詢生成的數字爲好。

2

我加入otherField1,otherField2只是做一個通用的答案
此ResultSet,永諾有14條記錄,填充空的latests如果有小於表中的這個數字

select top 14 tracking, otherField1, otherField2 
from (
    select tracking, otherField1, otherField2, 1 as orderBy from yourTable 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 
    union all select null, null, null, 2 -- this is 14 times here 
) as subQuery 
order by orderBy, tracking