将静态值添加到SQL查询结果

32

我想知道是否有一种方法可以通过SQL查询来实现这个目标。

我有一个表,叫做"LISTOFTHINGS",它有两个感兴趣的字段:"ID"和"NAMEOFTHING"。

我想构建一个查询,使得返回的结果是这个查询的结果:

SELECT ID, NAMEOFTHING FROM LISTOFTHINGS ORDER BY NAMEOFTHING

并在上述查询的第一行之前添加了一个行,其值为“-1,'ALL THINGs'”。

因此,如果表中有以下三个条目:

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' "在表格中放入一条记录,但问题是,如果我这样做,就需要更改程序中很多地方来忽略该记录进行处理。
"ALL THINGS"值是某个程序部分处理特殊情况的一种伪记录。
3个回答

38

你能在查询中使用联合操作吗?

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中与Oracle DUAL虚拟表等效的是SYSIBM.SYSDUMMY1。 - dave
实际上,是的!那正是我正在寻找的(只要它是我的DBMS所使用的有效SQL语句)。我一直在文档中查找如何执行静态查询,但我的SQL知识有点欠缺!谢谢! - Zeke Hansell
2
你应该使用UNION ALL而不是UNION。UNION会检查是否有需要消除的重复记录,这需要额外的时间。UNION ALL保留所有记录,但在这种情况下不应该有任何重复项。 - dave
1
@Dave,我真的不需要执行UNION ALL操作,因为与我实际选择的匹配的数据库记录数量足够小,以至于这并不重要。 - Zeke Hansell

16

试试这个:

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

1
谢谢!我觉得你首先发布了正确的代码,但上面的回答更完整,所以我将其标记为被接受的答案。 - Zeke Hansell

0
在 SQL Server Management Studio v18 中,有一点不同:
SELECT -1 AS ID, 'ALL THINGs' AS NAMEOFTHING
UNION
SELECT ID, NAMEOFTHING FROM LISTOFTHINGS 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接