Как объединить эти 2 отдельных заявления? - PullRequest
0 голосов
/ 25 ноября 2011

Как объединить эти 2 оператора выбора, чтобы вернуть 3 столбца?

первый выбор возвращает только текстовые значения, тогда как второй выбор возвращает значение столбца таблицы.Если вторая таблица не возвращает значения, все равно первый выбор должен иметь значение, а столбец имени может быть пустым

SELECT 'column1', 'column2'

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

Большое спасибо,

Ответы [ 4 ]

0 голосов
/ 26 ноября 2011

Если, как представляется, может быть только один матч, то решения Андрея или Уильяма являются лучшими.Если по какой-то странной причине 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)

Я чувствую себя немного грязно ....

0 голосов
/ 25 ноября 2011

это было бы проще, не нужно дублировать фиксированные столбцы:

DECLARE @name nvarchar(255)

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

SELECT 'column1', 'column2', @name AS 'Name'
0 голосов
/ 25 ноября 2011

Вы можете иметь один запрос, подобный этому:

SELECT
  'column1',
  'column2',
  (
    SELECT Name
    FROM [dbo].[TableName]
    WHERE ID = @id
  ) AS 'Name'
0 голосов
/ 25 ноября 2011

Вы имеете в виду что-то вроде этого:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...