2016-02-22 3 views
-2

У меня есть две таблицы и вам нужна комбинированная таблица на основе обоих.Соедините две таблицы и подсчитайте соответствующие столбцы из таблицы 2

таблица, как это ....

Combine table last column 
show count 
from Table 2 columns (Subject1, Subject2, Subject3, Subject4, Subject5, Subject6) 
where table1.course = table2.course match 

На следующем рисунке показан результат: enter image description here

Я использую MS SQL Server 2008. Я хочу, чтобы создать SQL-запрос и сохранить это как Views, так что я могу использовать его в приложении windows vb.net и показать его через отчет RDLC ......

+0

будет у вас всегда есть 6 субъектов столбцов в таблице 2 или будет число столбцов меняется. –

+0

спасибо 4 ответа, YES 6 фиксированных столбцов темы –

+0

Также вы используете версию SQL-Server? –

ответ

0

Дайте этим запросом попробовать:

select t.Edate, 
t.Course, 
t.Subject, 
sum(case when t.Subject = t2.Subject1 or t.Subject = t2.Subject2 or t.Subject = t2.Subject3 or t.Subject = t2.Subject4 or t.Subject = t2.Subject5 or t.Subject = t2.Subject6 then 1 else 0 end) [Count] 
from Table1 t 
join Table2 t2 on t.Course = t2.Course 
group by t.Edate, t.Course, t.Subject 
order by t.Edate, t.Course 

SQLFiddle

+0

Что происходит, когда участники присоединения находятся в разных строках (например, MA1 и A в примерах данных)? – Hogan

+0

Я не уверен, что вы имеете в виду. Вы посмотрели на мою скрипку? Результаты в значительной степени нужны ему (имея в виду, что он признал, что его примерные данные были не совсем правильными). – Jerrad

+0

ах хорошо, никоим образом не знать, чего он хотел, если образцы данных были неправильными, хорошая работа, читая его разум. – Hogan

0

Попробуйте этот пример ins TEAD:

SELECT  dbo.table1.Edate, dbo.table1.Course, dbo.table1.Subject AS SubjectTitle, COUNT(dbo.table2.Subject1) AS Subject1, COUNT(dbo.table2.Subject2) AS Subject2, COUNT(dbo.table2.Subject3) 
         AS Subject3, COUNT(dbo.table2.Subject4) AS Subject4, COUNT(dbo.table2.Subject5) AS Subject5, COUNT(dbo.table2.Subject6) AS Subject6 
FROM   dbo.table1 CROSS JOIN 
         dbo.table2 
GROUP BY dbo.table1.Edate, dbo.table1.Course, dbo.table1.Subject 
+0

Ответ Thanx 4, НЕТ его нет. Я хочу 2 проверить все 6 столбцов. –

+0

можно посчитать из еще одного стола и показать наконец. таблица3 также имеет ту же структуру, что и таблица2. ЕСЛИ возможно, пожалуйста, помогите –

0

Вероятно, это

WITH subjectList AS 
(
    SELECT course, Subject1 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject2 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject3 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject4 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject5 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject6 as subject 
    FROM TABLE2 
) 
SELECT T1.Edate, T1.course, sl.subject, count(*) as subject_count 
FROM TABLE1 T1 
JOIN subjectList sl on T1.Course = sl.course and T1.Subject = sl.subject 
GROUP BY T1.Edate, T1.course, sl.subject 

может быть это

WITH subjectList AS 
(
    SELECT course, Subject1 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject2 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject3 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject4 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject5 as subject 
    FROM TABLE2 
    UNION ALL 
    SELECT course, Subject6 as subject 
    FROM TABLE2 
) 
SELECT T1.Edate, T1.course, sl.subject, 
     count(*) OVER(PARTITION BY T1.course, sl.subject) as subject_by_course_count, 
     count(*) OVER(PARTITION BY sl.subject) as subject_count 
FROM TABLE1 T1 
JOIN subjectList sl on T1.Course = sl.course and T1.Subject = sl.subject 
GROUP BY T1.Edate, T1.course, sl.subject 
+0

можно ли посчитать из еще одного стола и показать наконец. таблица3 также имеет ту же структуру, что и таблица2. ЕСЛИ возможно, пожалуйста, помогите –

+0

@SantoshPandey - этот вопрос закрыт - вы отправили свой собственный ответ и отметили кого-то другого как правильный ответ - как в мире вы ожидаете от меня помощи? опубликуйте новый вопрос, в котором четко указано, что вы ищете. – Hogan

0

спасибо всем, я решил это с вашей помощью, если кто-то хочет, чтобы этот здесь:

select t.Edate,t.Etime, 
t.Course, 
t.Subject,t.Paper,t.Code, 
sum(case when t2.adcat = 'Regular' AND t.Subject = S.Subject then 1 else 0 end) [Reg], 
sum(case when t2.adcat = 'Private' AND t.Subject = S.Subject then 1 else 0 end) [Pri], 
sum(case when t2.adcat = 'Ex.' AND t.Subject = S.Subject then 1 else 0 end) [Ex], 
sum(case when t2.adcat = 'Back Paper' AND t.Subject = S.Subject then 1 else 0 end) [BP], 
sum(case when t2.adcat = 'Single Subject' AND t.Subject = S.Subject then 1 else 0 end) [SS], 
sum(case when t2.adcat = 'Improvement' AND t.Subject = S.Subject then 1 else 0 end) [Imp] 
from EXAMscheme t 
join tblstudetail t2 CROSS APPLY(VALUES (subjectI), (subjectII), (subjectIII), (subjectIV), (subjectV), (subjectVI)) AS S(subject) 
on t.Course = t2.Course and 
t.session = t.session and 
    t.session = '2015-16' and 
    t2.session = '2015-16' AND 
    t2.EXstatus = 'OK' 
group by t.Edate,t.Etime,t.Paper,t.Code, t.Course, t.Subject 
order by t.Edate, t.Course 
+0

один предмет больше. Можно ли добавить общее количество всех счетчиков в последнем столбце и общую сумму одной даты в последнем последнем столбце, как показано в моем коде. ПОЖАЛУЙСТА, ПОМОГИТЕ –

+0

, можно подсчитать еще один стол и показать наконец. таблица3 также имеет ту же структуру, что и таблица2. ЕСЛИ возможно, пожалуйста, помогите –