Как использовать настраиваемое поле из подзапроса в условии WHERE верхнего уровня SELECT в SQL - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь сделать что-то подобное, но получил ошибку и не могу понять, как правильно сделать последний ГДЕ?

SELECT *
FROM
(
SELECT s.SupplierID, s.CompanyName, 
(SELECT COUNT(*)
FROM dbo.Orders o
LEFT JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
LEFT JOIN dbo.Products p ON od.ProductID = p.ProductID
WHERE SupplierID = s.SupplierID) AS N'Number of orders'
FROM dbo.Suppliers s
) 
WHERE 'Number of orders' > 150;

Ответы [ 2 ]

1 голос
/ 16 октября 2019

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

SELECT s.SupplierID
    , s.CompanyName
    , COUNT(*)
FROM dbo.Orders o
JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
JOIN dbo.Products p ON od.ProductID = p.ProductID
join dbo.Suppliers s on s.SupplierID = p.SupplierID
group by s.SupplierID
    , s.CompanyName
having count(*) > 150
0 голосов
/ 16 октября 2019

Вам необходимо назвать основное выражение псевдонимом. Например, это работает:

SELECT * FROM (SELECT 1 AS One) O WHERE One = 1

Но это не так:

SELECT * FROM (SELECT 1 AS One) WHERE One = 1

Попробуйте это:

SELECT *
FROM
(
SELECT s.SupplierID, s.CompanyName, 
(SELECT COUNT(*)
FROM dbo.Orders o
LEFT JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
LEFT JOIN dbo.Products p ON od.ProductID = p.ProductID
WHERE SupplierID = s.SupplierID) AS N'Number of orders'
FROM dbo.Suppliers s
) T
WHERE 'Number of orders' > 150;

Кроме того, как только Ууердо ушел,Лучше использовать [Квадратные скобки] вместо «Одиночных кавычек», чтобы назвать их и обратиться к столбцу [Количество заказов]. Я считаю, что есть параметр, который определяет, допускаются ли одинарные кавычки, но квадратные скобки являются стандартом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...