如何合并这两个选择语句?

时间:2011-11-25 16:32:57

标签: sql-server tsql select

如何合并这两个select语句,以便返回3列?

第一个选择仅返回文本值,而第二个选择返回表列值。如果第二个表没有返回值,则第一个select仍然应该有值,而name列可以为null

SELECT 'column1', 'column2'

SELECT Name
FROM [dbo].[TableName]
WHERE ID = @id

非常感谢,

4 个答案:

答案 0 :(得分:0)

你的意思是这样的:

SELECT 'column1', 'column2', Name
FROM [dbo].[TableName]
WHERE ID = @id

这将为每一行返回一行,表格中匹配ID


更新

此查询将完全符合您的要求:

IF (SELECT COUNT(Name) FROM [dbo].[TableName] WHERE ID = @id) = 0
BEGIN
 SELECT 'column1', 'column2', NULL
END
ELSE
BEGIN
    SELECT 'column1', 'column2', Name
    FROM [dbo].[TableName]
    WHERE ID = @id
END

答案 1 :(得分:0)

这会更简单,无需复制固定列:

DECLARE @name nvarchar(255)

SELECT @name=Name FROM [dbo].[TableName] WHERE ID = @id 

SELECT 'column1', 'column2', @name AS 'Name'

答案 2 :(得分:0)

您可以使用以下一个查询:

SELECT
  'column1',
  'column2',
  (
    SELECT Name
    FROM [dbo].[TableName]
    WHERE ID = @id
  ) AS 'Name'

答案 3 :(得分:0)

如果看起来很可能只有一场比赛,那么Andriy或William的解决方案是最好的。如果出于某些奇怪的原因,Id不是主键,那么以下内容将按您的要求执行。

SELECT a.column1, a.column2, t.Name
  FROM 
  (
    SELECT 'column1' AS column1, 'column2' AS column2
  ) a
  LEFT JOIN [dbo].[TableName] t ON (t.ID = @Id)

我觉得有点脏....