SQL Server : выберите столбцы из таблицы A и присоедините КОЛИЧЕСТВО из таблицы B

#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;