SQL Server, имеющий критерии для подзапроса - PullRequest
2 голосов
/ 06 марта 2012

Мой запрос выглядит так:

SELECT field1, field2, (SELECT TOP 1 field1 from table1) as field3 
FROM table2 
HAVING field3 > 0

выдает ошибку

неверное имя столбца field3

Ответы [ 3 ]

3 голосов
/ 06 марта 2012

Невозможно использовать псевдонимы элементов данных в пределах HAVING или WHERE.

Вам необходимо повторно вызвать значение в операторе HAVING. Однако, использование условия WHERE было бы лучше здесь:

WHERE (SELECT TOP 1 field1 from table1) > 0
2 голосов
/ 06 марта 2012

Не используйте HAVING.WHERE здесь более уместно.

SELECT field1, field2, (SELECT TOP 1 field1 from table1) as field3
FROM table2
WHERE (SELECT TOP 1 field1 from table1) > 0

Теперь я предполагаю, что у вас есть работа с WHERE в подзапросе.Это использует значения из таблицы2.В противном случае вытащите этот запрос и присвойте значение переменной.

DECLARE @field3 AS INT --change this to the correct data type
SELECT TOP 1 @field3 = field1
FROM table1

SELECT field1, field2, @field3 as field3
FROM table2
WHERE @field3 > 0

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

DECLARE @field3 AS INT --change this to the correct data type
SELECT TOP 1 @field3 = field1
FROM table1

IF @field3 > 0
BEGIN
    SELECT field1, field2, @field3 as field3
    FROM table2
END
1 голос
/ 06 марта 2012

Измените HAVING, чтобы снова полностью определить field3.т.е.:

SELECT field1, field2, (SELECT TOP 1 field1 from table1) as field3 
FROM table2 
HAVING (SELECT TOP 1 field1 from table1) > 0
...