2016-11-22 4 views
1

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

SELECT (
    SELECT 
     COUNT (fibre_circuit.data_id) 
    FROM fibre_circuit 
     INNER JOIN bus_std_iptv 
      ON bus_std_iptv.d_parent_id = fibre_circuit.data_id 
    where fibre_circuit.data_id = 778 
) AS Count1, 
(
    SELECT 
     COUNT (fibre_circuit.data_id) 
    FROM fibre_circuit 
     INNER JOIN bus_pre_iptv 
      ON bus_pre_iptv.d_parent_id = fibre_circuit.data_id 
    where fibre_circuit.data_id = 778 
) AS Count2, 
(
    SELECT 
     COUNT (fibre_circuit.data_id) 
    FROM 
     fibre_circuit 
      INNER JOIN iptv 
       ON iptv.d_parent_id = fibre_circuit.data_id 
    where fibre_circuit.data_id = 778 
) AS Count3, 
(
    SELECT DISTINCT 
     fibre_circuit.data_id 
    FROM fibre_circuit 
     INNER JOIN bus_std_iptv 
      ON bus_std_iptv.d_parent_id = fibre_circuit.data_id 
    where fibre_circuit.data_id = 778 
) 
AS circuit 

Результат:

Count 1 | Count 2 | Count 3 | Circuit 

3  | 1  | 1  | 778 

Мне нужно SUM Count1 + count2 + Count3 просто получить:

Total | Circuit 

5  | 778 

Любой может помочь в разработке правильного запроса, чтобы получить желаемый результат ?

Спасибо заранее,

Miguel

+1

Замените ',' между count1, count2 и count3 на '+' и переименуйте count3 total. или перекрестно присоединяться к суммам вместо подзапросов, а затем суммировать итоговые суммы. – xQbert

+0

Спасибо xQbert. Это сработало!. –

ответ

0

Если есть первичный ключ на этих трех таблиц вы вступающих fibre_circuit к, то вы могли бы сделать что-то вроде этого :

select 
    fc.data_id as [Circuit], 
    count(distinct piptv.[whatever primary key there is here]) + 
    count(distinct iptv.[whatever primary key there is here]) + 
    count(distinct siptv.[whatever primary key there is here]) as [Tota] 
from fibre_circuit fc 
    left outer join bus_pre_iptv piptv 
     on fc.data_id = piptv.d_parent_id 
    left outer join iptv 
     on fc.data_id = iptv.d_parent_id 
    left outer join bus_std_iptv siptv 
     on fc.data_id = siptv.d_parent_id 
where fc.data_id = 778 
group by fc.data_id 
+0

Это дает мне 9 Всего вместо 5. –

+0

@ MiguelBérniz тогда вы могли бы предоставить примерные структуры таблиц и примеры данных? трудно понять, что происходит без него. – DForck42

+0

fibre_circuit - это родительская таблица для волоконных цепей. Поле ключа - fibre_circuit.data_id. Цепи оптоволокна могут иметь разные –

0

Попробуйте:

SELECT ( 
    SELECT 
    COUNT (fibre_circuit.data_id) 
    FROM 
    fibre_circuit 
     INNER JOIN 
    bus_std_iptv 
    ON 
    bus_std_iptv.d_parent_id = fibre_circuit.data_id 
    where 
    fibre_circuit.data_id = 778 
    ) + 
    (SELECT 
    COUNT (fibre_circuit.data_id) 
    FROM 
    fibre_circuit 
    INNER JOIN 
    bus_pre_iptv 
    ON 
    bus_pre_iptv.d_parent_id = fibre_circuit.data_id 
    where 
    fibre_circuit.data_id = 778 
    ) + 
    (
    SELECT 
    COUNT (fibre_circuit.data_id) 
    FROM 
    fibre_circuit 
    INNER JOIN 
    iptv 
    ON 
    iptv.d_parent_id = fibre_circuit.data_id 
    where 
    fibre_circuit.data_id = 778 
    ) AS Total, 
    (
    SELECT DISTINCT 
    fibre_circuit.data_id 
    FROM 
    fibre_circuit 
    INNER JOIN 
    bus_std_iptv 
    ON 
    bus_std_iptv.d_parent_id = fibre_circuit.data_id 
    where 
    fibre_circuit.data_id = 778 
    ) 
    AS circuit 
+0

The + сделал трюк. Спасибо!!! –

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