2015-08-24 1 views
0

Я искал существующий ответ, но, по моему мнению, совпадения нет (может быть, но терминология/метод не имеет смысла поэтому я пропущу его).SQL - Как получить подсчеты из других таблиц во время SELECT

Сценарий: У меня есть 3 таблицы:

  • Пользователей,
  • ActivityStart,
  • ActivityComplete

В таблице Members имеет информацию профиля пользователя

В ActivityStart записи таблицы запись всякий раз участник запускает и выполняет действия, предоставляя ему уникальный код активности и записывая идентификатор участника вместе с меткой времени.

В таблице ActivityComplete записана одна и та же информация, но в качестве выхода для активности с идентификатором участника и временной меткой - но эта таблица также имеет поле состояния для полного или частичного завершения.

Что мне нужно сделать, это экспортировать данные профиля члена вместе с подсчетом количества раз в таблице «Начало» и сколько раз они находятся в таблице «Выход» в виде частичного завершения и сколько раз полный.

Так, очевидно, я начинаю с основным запросом

SELECT MemberID, FNAME, EMAIL FROM Members 

Но я застрял, как бы я даже начать включать получение отсчетов из других таблиц, основанных на MemberID для каждой записи.

Может ли кто-нибудь помочь указать мне в правильном направлении?

Я использую SQL2012.

+0

вы пробовали GROUP BY – Helio

+0

Я думаю, что вы хотите что-то вроде 'WHERE (SELECT COUNT (*) FROM ActivityStart)> 120'. Это пример, это означает, что вы хотите, чтобы только члены, которые имеют активность более 120. OFC, вы должны присоединиться к таблицам – Hearner

+0

, пожалуйста, предоставьте [SQLFiddle] (http://sqlfiddle.com/) для всех ваших вопросов, связанных с SQL. Это поможет быстро получить ответы. – CoOl

ответ

0

Я думаю, что вы можете сделать это что-то вроде этого:

SELECT MemberID, FNAME, EMAIL , 
    (select COUNT (*) from ActivityStart start where start.MemberID=m.MemberID) ActivityStartCount, 
    (select COUNT (*) from ActivityComplete compl where compl.MemberID=m.MemberID) ActivityCompleteCount 
FROM Members m 
+0

Я просто тестировал это в SSMS, и он работает. Теперь, чтобы включить в мое приложение C# и посмотреть, как это происходит. – RossS

0

Что-то вроде этого:

SELECT M.MemberID, FNAME, EMAIL, 
    StartCount = SUM(CASE WHEN Ast.ID IS NOT NULL THEN 1 ELSE 0 END), 
    FullCompleteCount = SUM(CASE WHEN AComp.ID IS NOT NULL AND AComp.Complete = 'Full' THEN 1 ELSE 0 END), 
    PartialCompleteCount = SUM(CASE WHEN AComp.ID IS NOT NULL AND AComp.Complete = 'Partial' THEN 1 ELSE 0 END), 
FROM Members M 
    LEFT JOIN ActivityStart ASt ON A.MemberID = M.MemberID 
    LEFT JOIN ActivityComplete AComp ON AComp.MemberID = M.MemberID 
GROUP BY 
    M.MemberID, FNAME, EMAIL