2015-04-21 2 views
1

У меня есть три таблицы, в которых я хочу группу DateStart DateEnd и внешний ключ и подсчета строкиВыбор количества из трех таблиц и группы по одному полю

таблица 1:

start    end   FK 

10/01/2014 12/01/2014 5 
10/01/2014 13/01/2014 5 


table 2 
10/01/2014 12/01/2014 5 
10/01/2014 13/01/2014 6 

table 3 

10/01/2014 12/01/2014 5 
10/01/2014 13/01/2014 7 


Result 

10/01/2014 12/01/2014 5  3 (rows) 
10/01/2014 13/01/2014 5  1 
10/01/2014 13/01/2014 6  1 
10/01/2014 13/01/2014 7  1 

EDIT: это моя попытка (для первых двух таблиц), который не работает, как exepected:

SELECT  query.IDchild as IDchild, 
     Count(query.Number) as Number, 
     query.DateStart as DateStart, 
     query.DateEnd as DateEnd 
(SELECT  RES.IDchild as IDchild, 
     Count(RES.Number) as Number, 
     RES.DateStart as DateStart, 
     RES.DateEnd as DateEnd 
FROM [dbo].[VA_R] as RES 
WHERE (condition) 
GROUP BY RES.IDchild ,RES.DateStart,RES.DateEnd 

Union all 

SELECT  RES_o.IDchild as IDchild, 
     Count(RES_o.Number) as Number, 
     RES_o.DateStart as DateStart, 
     RES_o.DateEnd as DateEnd 
FROM [dbo].[VA_R_o] as RES_o 
WHERE (condition) 
GROUP BY RES_o.IDchild ,RES_o.DateStart,RES_o.DateEnd, RES_o.PK_R) as query 

GROUP BY RESqueryo.IDchild ,query.DateStart,query.DateEnd 
+1

UNION ALL, группа по результату. Кроме того, это столбцы, а не поля. – jarlh

+0

@MitchWheat, см. Править – DEv0404

ответ

1
SELECT T.start, T.end, T.FK, COUNT(*) 
FROM (
    SELECT start, end, FK 
    FROM YourTable1 

    UNION ALL 

    SELECT start, end, FK 
    FROM YourTable2 

    UNION ALL 

    SELECT start, end, FK 
    FROM YourTable3 
) AS T 
GROUP BY T.start, T.end, T.FK 

Это должно сделать это. Сначала объединяйте все результаты и только затем группируйте соответствующие поля. Как сказано в комментариях.

Смежные вопросы