2010-08-31 94 views
0

指定数量的想象一下,一个简单的查询:查询来选择行

SELECT name, lastname FROM people 

让我们想象一下它返回6行。我需要做的是返回ROWS Mod 4等于0的行数。因此,如果查询通常返回6行,它应该返回2行,其中包含名称和姓氏为NULL的行。很容易计算它将返回的行并生成必要的联合选择,但是我想知道是否可以在sql中完成。我知道,听起来有点愚蠢的,你可能想告诉我要找到不同的解决方案,但这是我的问题,最简单的解决方法]

+0

你能描述一下你的问题,以达到另一个解决方案吗? – 2010-08-31 09:47:28

+0

你的rdbms是什么? – 2010-08-31 09:52:43

+0

你已经提供了答案。 MSSQL。谢谢,我会尝试 – 2010-08-31 10:41:02

回答

2

对于Oracle:

SELECT name, lastname FROM people 
UNION ALL 
SELECT NULL, NULL FROM people 
WHERE RowNum <= (Select mod(Count(*),4) from people) 

为MSSQL:(> = 2005)

SELECT name, lastname FROM people 
UNION ALL 
select null, null from 
(
    SELECT row_number() over(order by name) r FROM people 
) 
WHERE r <= (Select Count(*) % 4 from people) 
+0

不幸的是,我的mssql在'where'附近给出了错误的语法错误。无论如何,我只是看着我的查询,这对我来说太复杂了。所有这些连接和声明都会变得无法阅读。我想我只是以编程方式将必要的联合添加到SQL。谢谢您的帮助! – 2010-09-01 06:21:32