2013-02-09 2 views
1

У меня есть запрос, который возвращает правильную информацию, но я не могу понять, как получить отдельные дни и суммировать счет. ниже мой запрос, и результаты показывают, что я верну, и то, что я хотел бы вернуться. Я думал, что союз присоединится к ним и вернет мои результаты. Я искал довольно долгое время и не нашел никакой помощи по этой теме. Любая помощь будет оценена. Заранее спасибо.Запрос 2 таблицы из 2 машин и результатов группы

SELECT COUNT(log_datetime) AS icount, CONVERT(varchar, log_datetime, 101) AS logdate 
from openrowset('sqloledb', 'ServerName1';'UserID';'Password', 
      'select * from DatabaseName..TableName where field1 > 899') 
group by convert(varchar, log_datetime, 101) 
union 
SELECT COUNT(log_datetime) AS icount, CONVERT(varchar, log_datetime, 101) AS logdate 
from openrowset('sqloledb', 'ServerName2';'UserID';'Password', 
    'select * from DatabaseName..TableName where field1 > 899') 
group by convert(varchar, log_datetime, 101) 
order by logdate 


Results 
235  01/10/2013 
312  01/10/2013 
3091 01/11/2013 
3197 01/11/2013 
3339 01/12/2013 
3536 01/12/2013 


Wanted Results 
547  01/10/2013 
6288  01/11/2013 
6875  01/12/2013 

ответ

1

Вы можете попробовать это

SELECT SUM(icount) AS icount, logdate FROM 
(
    SELECT COUNT(log_datetime) AS icount, CONVERT(varchar, log_datetime, 101) AS logdate 
    FROM openrowset('sqloledb', 'ServerName1';'UserID';'Password', 
       'select * from DatabaseName..TableName where field1 > 899') 
    GROUP BY convert(varchar, log_datetime, 101) 
     UNION ALL 
    SELECT COUNT(log_datetime) AS icount, CONVERT(varchar, log_datetime, 101) AS logdate 
    FROM openrowset('sqloledb', 'ServerName2';'UserID';'Password', 
     'select * from DatabaseName..TableName where field1 > 899') 
    GROUP BY convert(varchar, log_datetime, 101) 
) AS tbl 
GROUP BY logdate 
ORDER BY logdate 

А вот sqlfiddle

+0

Работал отлично, спасибо вам большое! – user1961776

0

Я считаю, что ответ Петерма прав, просто хотел добавить примечание о том, почему.

С SQL, вы должны думать в наборах. Вы создаете два уникальных набора данных и, используя UNION, объединяете их. Однако ваши операторы GROUP BY находятся в каждом наборе, а не в комбинации. Следовательно, получается несколько строк. Упаковывая все с помощью другого оператора SELECT, вы запрашиваете комбинированный набор и теперь можете группировать и агрегировать.

1
SELECT count(1) icount, AA.logdate FROM 
(
SELECT CONVERT(varchar, log_datetime, 101) AS logdate 
from openrowset('sqloledb', 'ServerName1';'UserID';'Password', 
      'select * from DatabaseName..TableName where field1 > 899') 
union all 
SELECT CONVERT(varchar, log_datetime, 101) AS logdate 
from openrowset('sqloledb', 'ServerName2';'UserID';'Password', 
    'select * from DatabaseName..TableName where field1 > 899') 
) AA 
group by AA.logdate order by AA.logdate 
Смежные вопросы