2011-12-13 7 views
0

у меня есть две таблицыОбъединение двух запросов (MS SQL)

Одна таблица соединяет «идентификатор клиента» с «идентификатором продукта»

TABLE A 

ClientID ProductID 
1  2 
1  4 
1  6 
2  3 
2  5 

Тогда есть еще одна таблица, которая регистрирует количество времени, проведенное с продукт:

TABLE B 
ProductID Time Date_added 
2  10 (datetime) 
4  2 (datetime) 
2  3 (datetime) 
4  1 (datetime) 

Как объединить два запроса:

Один запрос, чтобы получить все идентификатор продукта» с, связанным с клиентом

SELECT ProductID FROM TABLE_A where ClientID = 1 

Затем получите ежемесячную сумму всего времени, потраченного на эти продукты?

SELECT SUM(time) from Table_B WHERE DATEPART(month, Date_added) = 8 AND ProductID = (products from the previous query?) 
+1

время не столбец в TABLE_A – danludwig

+0

@ olivehour Хороший улов, я даже не проверял это вначале. – Yuck

ответ

3

Похоже, вы хотите присоединиться заявление, принимая выстрел в темноте, но, вероятно,

SELECT A.ClientID,SUM(B.Time) 
    FROM 
    TABLE A AS A 
    LEFT JOIN 
    TABLE B AS B ON (A.ProductID = B.ProductID) 
    WHERE 
    DATEPART(month, B.Date_added) = 8 
    GROUP BY 
    A.ClientID 

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

+0

Спасибо, это отлично работает. – redconservatory

0

Вы действительно очень близко.

SELECT SUM(B.time) 
FROM Table_B B INNER JOIN 
    Table_A A ON B.ProductID = A.ProductID 
WHERE DATEPART(month, B.Date_added) = 8 
    AND A.ClientID = 1 
; 
+0

To to SUM(), вам не нужно иметь предложение GROUP BY? – danludwig

+1

@olivehour Не, если это единственный столбец, который был возвращен, так как ОП написал этот вопрос. – Yuck

0
SELECT SUM(time) from Table_B 

WHERE DATEPART(month, Date_added) = 8 
AND ProductID IN (SELECT ProductID FROM TABLE_A where ClientID = 1) 
  • обновлен для использования в вместо =
+0

Почему бы не просто «ПРИСОЕДИНЯЙСЯ»? – Yuck

+0

@ Yuck JOIN может потенциально возвращать несколько записей, если ProductID не уникален. Скорее всего, я знаю, учитывая, как описывается этот вопрос, но все это происходит. – potNPan

+0

@potNPan ... перечитайте вопрос. OP ** хочет ** несколько продуктов. Нет проблем с тем, что в суммировании имеется несколько продуктов. – Yuck

0
SELECT SUM(time) 
FROM B 
Join A on A.productID = B.ProductID 
WHERE where a.clientID =1 
group my month(b.date); 
Смежные вопросы