Как объединить подзапрос в T-SQL - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь запустить приведенный ниже код в SQL Server и не могу этого сделать.

select * from ( 
  select 1,'Arun Kumar' union all
  select 2,'Arun Kumar' union all
  select 3,'Arun Kumar' union all
  select 4,'Arun Kumar'
)

Сообщение об ошибке:

Сообщение 102, уровень 15, состояние 1, Строка 6. Неверный синтаксис рядом с ')'

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 08 ноября 2019

Я предпочитаю использовать CTE для этой ситуации:

WITH cte AS (
    SELECT 1 AS id, 'Arun Kumar' AS name UNION
    SELECT 2, 'Arun Kumar' UNION
    SELECT 3, 'Arun Kumar' UNION
    SELECT 4, 'Arun Kumar'
)

SELECT id, name
FROM cte;

Я предпочитаю синтаксис CTE, потому что он легко позволяет нам ссылаться на один и тот же CTE более одного раза при построении запроса. На самом деле, когда я настраиваю демонстрации для вопросов SQL здесь, в Stack Overflow, это то, чем я в конечном итоге занимаюсь большую часть времени.

Примечание: поскольку ваши значения id различны для каждой записи, мы можем простоиспользуйте UNION вместо менее производительного UNION ALL, так как не может быть повторяющихся записей.

3 голосов
/ 08 ноября 2019

Если вы используете подзапрос в качестве таба в запросе select ... from, вы ДОЛЖНЫ предоставить псевдоним, поэтому ваш запрос должен выглядеть следующим образом. Кроме того, вам также необходимо указать алисы для столбцов:

select * from ( 
  select 1 [Column1],'Arun Kumar' [Column2] union all
  select 2,'Arun Kumar' union all
  select 3,'Arun Kumar' union all
  select 4,'Arun Kumar'
) aliasName
2 голосов
/ 08 ноября 2019

вы можете установить псевдоним для вашего столбца, и это прекрасно работает:

select * from ( 
select 1 as c1,'Arun Kumar' as c2 union all
select 2 as c1,'Arun Kumar' as c2 union all
select 3 as c1,'Arun Kumar' as c2  union all
select 4 as c1,'Arun Kumar' as c2 ) res
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...