#sql #sql-server #tsql
#sql #sql-сервер #tsql
Вопрос:
Я хочу создать SQL-запрос, чтобы я мог извлекать всю информацию в одной транзакции базы данных, а не загружать ее часть в свой код C #, а затем запускать дочерний повторитель, чтобы получить количество для остальной части.
Они соответствуют строкам таблиц, по которым я пытаюсь выполнить этот запрос.
Таблица A (это каталог продуктов)
ID : Product : Description
-----------------------------------------------
1 : Apple : This fruit grows on trees
2 : Cherry : This fruit grows on a bush
Таблица B (это система отслеживания продаж)
ID : Sold
---------
1 : 15
1 : 10
2 : 13
1 : 8
2 : 5
Мой желаемый результат запроса был бы
ID : Title : Description : Sold (Count)
---------------------------------------------------------
1 : Apple : This fruit grows on trees : 33
2 : Cheery : This fruit grows on a bush : 18
Что у меня есть на данный момент? Я должен признать, что я перепробовал так много способов добиться этого, что это то, что у меня сейчас открыто, но не работает.
SELECT
a.ID, a.Title, a.Description,
ISNULL(b.Sold, 0) AS SellCount
FROM
TableA a
LEFT JOIN
(SELECT
COUNT(b.Sold), b.ID
FROM
TableB b
WHERE
b.ID = a.ID
GROUP BY
b.Sold) AS b ON b.ID = a.ID
Я довольно новичок в более сложных запросах в SQL Server, и я был бы очень признателен за любую помощь и указания. Дайте мне знать, если я могу быть более описательным с чем-либо.
Комментарии:
1. У вас почти получилось. Просто удалите предложение where в производной таблице (выберите количество …) (которой вы присвоили псевдоним «b»).
Ответ №1:
Вы можете использовать :
SELECT a.ID, a.Title, a.Description, SUM(ISNULL(b.Sold,0)) as SellCount
FROM TableA a
LEFT JOIN TableB b On b.ID = a.ID
Group By a.ID, a.Title, a.Description
Комментарии:
1. Потрясающе, и вот так моя проблема была решена, и я кое-чему научился из этого. Очень ценю это.
Ответ №2:
Один из методов заключается в использовании коррелированного подзапроса в SELECT
предложении:
SELECT
a.ID
, a.Title
, a.Description
, (SELECT SUM(b.Sold) FROM TableB b WHERE b.ID = a.ID)
FROM TableA a;