2015-11-11 5 views
-2

Это запрос, который я пытаюсь получить, но я получаю синтаксическую ошибку.SQL Выберите значение as (Подзапрос)

SELECT Column1 as (SELECT Value2 from Table2 Where ConditionA, ConditionB, ConditionC) 
from Table1 

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

+1

Вопрос в том, что вы пытаетесь сделать? Добавьте структуру таблицы, данные примера и ожидаемый результат. –

+2

Просто пояснить - пытаетесь ли вы использовать подзапрос (из 'Table2.Value2') для создания псевдонима для' Column1' в 'Table1'? – Jamiec

+1

Если вам нужно имя переменной столбца, вам нужен динамический sql – lad2025

ответ

-2

попробовать

SELECT (SELECT Value2 from Table2 Where ConditionA, ConditionB, ConditionC) Column1 from Table1 
+1

Это не имеет большого смысла, вы фактически ничего не выбираете из 'Table1' – Jamiec

+0

Это изменит содержание и его псевдоним ... – CactusCake

+0

вопрос не в том, имеет ли это смысл или нет ... это ответ на вопрос, который у пользователя был. Он должен решить, имеет ли это смысл или нет. вопрос -> ответ – cboden

0

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

Ваш единственный вариант - динамически строить sql и использовать sp_executesql, но это обычно указывает на то, что что-то еще пошло не так!

Start, получая значение, которое вы хотите, пару точек

  • убедиться, что вы получите только 1 результат, либо с помощью TOP 1 или соответствующих условий фильтра
  • несколько условий разделяются AND или OR, а не запятой

    declare @alias NVARCHAR(100) -- whatever is appropriate 
    SELECT TOP 1 @alias = value2 FROM Table2 
    WHERE someField = 'some value' 
    

Т купите sql динамически и выполните его.

DECLARE @sql NVARCHAR(100) = 'SELECT Column1 AS ' + @alias + ' FROM Table1' 
EXEC sp_executesql @sql 

Вы можете увидеть это в действии здесь: http://sqlfiddle.com/#!3/71f8d6/3

Но, подчеркиваю, это плохо решение.

+0

Не быть глупым, но почему это плохо? Просто пытаюсь продолжить обучение. – TechProjCoord

+0

Это не глупый вопрос, но надолго ответить, особенно в комментарии. Читайте: http://stackoverflow.com/questions/317725/is-a-dynamic-sql-stored-procedure-a-bad-thing-for-lots-of-records, чтобы начать – Jamiec

+0

И если вы после канонического ответьте, попробуйте следующее: http://www.sommarskog.se/dynamic_sql.html (предупреждение: long) – Jamiec

Смежные вопросы