2011-06-24 42 views
13

我想知道是否有办法用SQL查询来完成此操作。将静态值添加到SQL查询的结果

我有一个表,让我们把它称为“LISTOFTHINGS”有兴趣“ID”和“NAMEOFTHING”两个领域

我想要做的是建立一个查询,以便得到什么返回的结果此查询:

SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 

和第一行上述查询的具有“-1‘所有的东西’”作为值之前添加一行。

所以,如果表中有以下三项:

1, 'THING 1' 
3, 'THING 3' 
2, 'THING 2' 

然后我想要的结果看起来是这样的:

-1, 'ALL THINGS' 
1, 'THING 1' 
2, 'THING 2' 
3, 'THING 3' 

我知道我可以做查询和创建列表与代码,但在我使用这个VB6程序内,我有一个第三方应用程序(我没有代码)采取查询来填充结果的ACTIVEX表控件。我没有挂钩来添加静态值。

我也知道我可以在表中为“-1,'所有事情''放一个记录”,但问题是,如果我这样做,我将需要改变程序中的很多地方在处理时忽略该记录。

'ALL THINGS'的值是伪记录,它处理程序某一部分的特例。

回答

25

你可以在查询中做一个联合?

SELECT -1 AS ID , 'ALL THINGS' AS NAMEOFTHING FROM DUAL /*'FROM DUAL' is an Oracle thing, 
                 not sure if you need to do 
                 something like that in DB2*/ 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 

显然,这是它应该如何为DB2

SELECT -1 AS ID , 'ALL THINGS' AS NAMEOFTHING FROM SYSIBM.SYSDUMMY1 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING 
+1

我相信DB2相当于甲骨文DUAL虚表是SYSIBM .SYSDUMMY1 – dave

+0

其实,是的!这正是我正在寻找的(假设它对于我正在使用的DBMS是有效的SQL)。我在挖掘文档,试图找出如何做一个静态查询,但我的SQL有点斑点!谢谢! –

+2

应该可能使用UNION ALL而不是UNION。 UNION会检查是否有需要消除的重复记录,这会花费额外的时间。 UNION ALL保留所有记录,但在这种情况下,不应该有任何重复记录。 – dave

12

试试这个来完成:

SELECT -1 AS ID, 'ALL THINGs' AS NAMEOFTHING FROM SYSIBM.SYSDUMMY1 
UNION 
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS 
+1

谢谢!我认为你先发布了正确的代码,但上面的答案更完整,所以我将其标记为已接受。 –