Количество SQL в поле зрения как столбец

Я пытаюсь получить результат КОЛИЧЕСТВА как столбец, по моему мнению. Посмотрите ниже запроса для демонстрации вида вещи, которую я хочу (это только в демонстрационных целях),

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders

FROM tblProducts prod
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID

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

Я использую SQL Server

8
задан Taryn 17 November 2013 в 14:45
поделиться

4 ответа

Ваш запрос действительно будет работать, если вы удалите соединение - оно фактически не используется, и это приведет к конфликту таблицы ord во внутреннем подзапросе выбора с таблица ord, к которой вы присоединились:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    (SELECT COUNT(*) FROM ord WHERE ord.ProductID = prod.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod

В качестве альтернативы вы можете использовать объединенную таблицу вместе с Group By :

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductID) AS TotalNumberOfOrders
FROM tblProducts prod
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID
GROUP BY
    ProductID, 
    Name, 
    Description, 
    Price
8
ответ дан 5 December 2019 в 12:57
поделиться

Если вас интересуют только заказанные продукты, вы можете просто заменить операцию LEFT OUTER JOIN на INNER JOIN:

SELECT 
    prod.ProductID, 
    prod.Name, 
    prod.Description, 
    prod. Price, 
    COUNT(*) AS TotalNumberOfOrders
FROM tblProducts prod
INNER JOIN tblOrders ord ON prod.ProductID = ord.ProductID
1
ответ дан 5 December 2019 в 12:57
поделиться

Попробуйте следующее:

SELECT  
    ProductID,  
    Name,  
    Description,  
    Price,  
count(*) as totalnumberoforders
FROM tblProducts prod 
LEFT JOIN tblOrders ord ON prod.ProductID = ord.ProductID 
group by
    ProductID,  
    Name,  
    Description,  
    Price
4
ответ дан 5 December 2019 в 12:57
поделиться

Это будет работать:

SELECT 
    ProductID, 
    Name, 
    Description, 
    Price, 
    COUNT(ord.ProductId) AS TotalNumberOfOrders
FROM tblProducts prod
LEFT JOIN tblOrders ord
 ON prod.ProductID = ord.ProductID
GROUP BY
    ProductID, 
    Name, 
    Description, 
    Price

Пункт "COUNT(ord.ProductId)" гарантирует, что если заказов не найдено, TotalNumberOfOrders будет равен нулю.

[Более поздняя правка: я забыл пункт GROUP BY. Дох!]

0
ответ дан 5 December 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: