如何将人工数据插入到select语句中

时间:2010-03-12 08:47:35

标签: sql-server

假设我们得到如下原始查询:

SELECT A, B, C FROM tblA

现在,我需要额外的人工行 选择'Kyala',B,C FROM tblA ,例如,当C = 100时,将其插入到结果集中。

例如,如果tblA持有一行:

A      B      C
John   1      100

我的目标是使用单个SQL查询返回如下所示的两行。

A      B      C
John   1      100
Kyala  1      100

我怎样才能实现使用单个SQL 而不是依赖于表变量或临时表?

5 个答案:

答案 0 :(得分:2)

刚改进查询以解决Union上的错误:

SELECT A, B, C from tblA
UNION
SELECT 'Kyala' as A, B, C FROM tblA WHERE C = 100

如果你不想要c = 100的其他人并且仍然在结果中获得A(来自工会中的第一个Select),你可以这样做:

SELECT A, B, C from tblA WHERE C <> 100
UNION
SELECT 'Kyala', B, C FROM tblA WHERE C = 100

SELECT CASE(C)
           when 100 then 'Kyala'
           else A
       END as A, B, C from tblA

答案 1 :(得分:1)

您可以使用CASE:

SELECT B, C, 
       CASE 
          WHEN C = 100 THEN 'Kyala'
          ELSE A
       END
FROM tblA

答案 2 :(得分:0)

您可以使用UNION运算符实现此目的。

SELECT A, B, C from tblA
UNION
SELECT 'Kyala', B, C FROM tblA WHERE C = 100

回答有关提高性能的评论中的问题,以便只查询一次表 - 您可以在列C和B上添加覆盖索引,以便查询的第二部分使用该索引而不是查询表:

CREATE NONCLUSTERED INDEX [IX_tblA_CD] ON [dbo].[tblA] 
(
    [C] ASC
)
INCLUDE ( [B]) ON [PRIMARY]
GO

但是,根据用例(这听起来像某种特殊的测试过程?),您可能更愿意接受两次表扫描,而不是添加一个可能不适合使用的新索引在生产中。

答案 3 :(得分:0)

您可以使用UNION语句:

SELECT A, B, C FROM tblA
UNION
SELECT 'Kyala', B, C FROM tblA WHERE C = 100

答案 4 :(得分:-4)

I need to additional artificial rows like SELECT 'Kyala', B, C FROM
     

tblA,例如,当C = 100时   插入到结果集中。

现在,请阅读.... *在SQL Server中的IF * SWITCH等。

基本上,您可以如图所示定义其他列

(SELECT 'test', A, B, C FROM...)

但是,不是'test',你可以输入if或switch并使用其他字段来确定要输出的确切内容。

SELECT IF (xxxx) AS FirstColumn, A, B,
C FROM ...