当查询没有返回任何行时,返回至少X行(空行直到行数为X)

时间:2017-08-30 19:44:35

标签: sql sql-server

有没有办法获得至少X行?即使查询返回0行。 例如,如果一个表总共有3行,那么如何从该表中执行SELECT TOP 10并返回包含数据的3行和7行全部为空的行?

我环顾四周但找不到我想要的确切答案。 我正在使用SQL Server 2012 谢谢!

3 个答案:

答案 0 :(得分:0)

我相信您需要使用数字表作为起点。然后你可以将数字表连接到数字表来实现这个结果。

WITH CTE_numbers AS (--using a cte as an example of a numbers table
SELECT 1 as rn
UNION ALL
SELECT 2
UNION ALL
SELECT 3)
,
cte_Top as(--Query to select top X number of records
SELECT TOP 3 'testdata' r,ROW_NUMBER() OVER(ORDER BY column) as rn
FROM Table)

SELECT *
FROM CTE_numbers cb
LEFT JOIN cte_Top ct
ON cb.rn = ct.rn

即使使用“TOP”的查询在结果中没有等量的行,这也应该为您提供正确的行数。我使用前三名而不是前十名,但您可以更改查询以满足您的需求。

答案 1 :(得分:0)

One method just appends 10 empty rows and then chooses 10 rows from the entire result set:

import { Answer } from "./answer";

export class Question {

    constructor(private question: string          = '',
                private answers: any[]            = [],
                private more_informations: string = '',
                private difficulty: number        = 0,) {
    }

    setModel(obj) {
        Object.assign(this, obj);
    }

    addAnswer() {
        let new_answer = new Answer();

        new_answer.setModel({ text: 'test', value: false });

        this.answers.push(new_answer);
    }

    setAnswers(number_answers) {
        for (let i = 0; i < number_answers; i++) {
            this.addAnswer();
        }

        console.log(this);
    }

}

答案 2 :(得分:0)

我最后首先在函数上使用了一行,然后在表中加入。工作就像一个魅力。谢谢你的帮助!