我有一个奇怪的要求,理想情况下应该在SQL中解决,而不是周围的应用程序.
无论有多少实际可用,我都需要精确选择5行.在实践中,可用的行数通常小于5,并且在极少数情况下它将超过5."额外"行应该null在每列中都有.
该应用程序使用的技术不是Turing Complete.在应用程序代码中,这个要求比你想象的要难得多!为了描述它,该应用程序实际上是一个变换器:它接收一堆查询并吐出报告.所以请理解应用程序不是用传统意义上的"编程语言"编写的.
所以,例如,如果我有一个表:
A | B
-----
1 | X
2 | Y
3 | Z
Run Code Online (Sandbox Code Playgroud)
那么有效的结果就是
A | B
-----------
2 | Y
1 | X
3 | Z
null | null
null | null
Run Code Online (Sandbox Code Playgroud)
我知道这是一个不寻常的要求.遗憾的是,由于使用了该技术,它在应用程序中无法解决.
理想情况下,这不应该要求更改数据库,但如果没有其他方式可以安排更改.
有什么建议?
你可以这样做:
select top 5 a, b
from (select a, b, 1 as priority from t union all
select null, null, 2 cross join
(values(1, 2, 3, 4, 5)) v(5)
) x
order by priority;
Run Code Online (Sandbox Code Playgroud)
也就是说,创建虚拟行,附加它们,然后选择前五行.
我认为这项工作应该在应用程序中完成,但您可以在SQL中完成.