2016-04-25 4 views
-1

Мне нужно изменить следующий набор запросов sql 2014 для использования двух отдельных баз данных с двух разных серверов.ИСПОЛЬЗУЙТЕ 2 разных базы данных sql в одном запросе

Мне нужно сначала определить общий доход, общая стоимость, & общая валовая прибыль между двумя базами данных, прежде чем вычислять Среднее за последние 7 дней на основе суммы итогов выручки. текущая функция Я использую прекрасно работает, кроме него, не используя Сумма доходов Итоговые с обеих database.Tables [DBO]. [dw_rpt_traffic] & [mediaalpha]. [PublisherCallByDay]

Мне нужно, чтобы присоединиться к таблицам из 2 разных server.databases. Обратите внимание, что к ним следует добавить CallDate & CreateDate. Однако ни одна таблица не содержит всех дат за последние 90 дней (выполняется 90 дней на основе текущей даты), поэтому это повлияет на тип соединения.

Пересмотренный код: по-прежнему имеется проблема с последней частью кода для объединения данных из обоих источников данных для определения среднего значения. Ошибка: недопустимое имя объекта 'rpt'.

WITH RPT 
     AS (SELECT x.CreateDate 
        , x.RevenueTotals 
        , (x.RevenueTotals-x.COSTTOTALS) as GrossProfit 

      FROM  (SELECT CAST(t.Create_DTG AS DATE) AS CreateDate 
          , SUM([AGENT_REV]+[ANCHOR_REV]+[CORP_REV]+[OFFSITE_REV]) as RevenueTotals 
          , SUM([MEDIA_EST_COST]+[OTHER_COST]) as COSTTOTALS 
         FROM  sqlclus3.[abc1234RPT].[dbo].[dw_rpt_traffic] t, 
         WHERE  CAST(t.CREATE_DTG AS DATE) > CAST(GETDATE() - 90 AS DATE) 
         GROUP BY CAST(t.CREATE_DTG AS DATE) 
        ) x 
     ) 
SELECT r.CreateDate 
     ,r.RevenueTotals 
     ,r.GrossProfit 
FROM RPT r 
WHERE r.CreateDate > CAST(GETDATE() - 90 AS DATE) 
ORDER BY r.CreateDate desc; 


WITH Calls 
     AS (SELECT x.Call_Date 
        , x.RevenueTotals 
        , x.Gross_Profit 
      FROM  (SELECT CAST(t.[CallDate] AS DATE) AS Call_Date 
            , SUM(Revenue) as RevenueTotals 
            , SUM(Cost) as CostTotals 
            , SUM(GROSSPROFIT) AS Gross_Profit 
           FROM  [abc123ETL].[mediaalpha].[PublisherCallByDay] t 
           WHERE  CAST(t.[CallDate] AS DATE) > CAST(GETDATE() - 90 AS DATE) 
           GROUP BY CAST(t.[CallDate] AS DATE) 

        ) x 
     ) 
SELECT c.Call_Date 
     ,c.RevenueTotals 
     ,c.Gross_Profit 
FROM Calls c 
WHERE c.Call_Date > CAST(GETDATE() - 90 AS DATE) 
ORDER BY c.Call_Date desc;  

select A.Create_Date 
    , A.RevTotal as RevenueTotal 
    , A.Gross_profit as GrossProfit 
    , AVG(A.RevTotal) OVER (ORDER BY A.Create_Date 
          ROWS BETWEEN 6 PRECEDING AND CURRENT ROW 
          ) AVG7DAYS 
FROM 
    (
    Select Rpt.CreateDate as Create_Date 
     , sum(rpt.RevenueTotals+calls.RevenueTotals) as RevTotal 
     , sum(rpt.GrossProfit+calls.Gross_Profit) as GrossProfits 
    from rpt FULL OUTER JOIN calls 
      on rpt.createDate = calls.call_date 
    ) A 
ORDER BY a.Create_Date 

OLD Код

use sqlclus3.ABC342 

go 



WITH cte 
    AS (SELECT x.CreateDate 
       , x.RevenueTotals 
       , x.RevenueTotals-x.COSTTOTALS as GrossProfit 
       , AVG(x.RevenueTotals) OVER (ORDER BY x.CreateDate 
             ROWS BETWEEN 6 PRECEDING AND  CURRENT ROW 
       ) AS Avg7Days 
     FROM  (SELECT CAST(t.Create_DTG AS DATE) AS CreateDate 
         , SUM([AGENT_REV]+[ANCHOR_REV]+[CORP_REV]+[OFFSITE_REV]) as RevenueTotals 
         , SUM([MEDIA_EST_COST]+[OTHER_COST]) as COSTTOTALS 
        FROM  [dbo].[dw_rpt_traffic] t 
        WHERE  CAST(t.CREATE_DTG AS DATE) > CAST(GETDATE() - 90 AS DATE) 
        GROUP BY CAST(t.CREATE_DTG AS DATE) 
       ) x 
    ) 

SELECT c.CreateDate 
    ,c.RevenueTotals 
    ,c.Avg7Days 
    ,c.GrossProfit 

FROM cte c 

WHERE c.CreateDate > CAST(GETDATE() - 90 AS DATE) 

ORDER BY c.CreateDate desc; 


Use SEASQL03.[ABC123] 

go 

WITH Calls 
    AS (SELECT x.Call_Date 
       , x.RevenueTotals 
       , x.Gross_Profit 
       , AVG(x.RevenueTotals) OVER (ORDER BY x.[Call_Date] 
             ROWS BETWEEN 6 PRECEDING AND CURRENT ROW 
       ) AS Avg7Days 
     FROM  (SELECT CAST(t.[CallDate] AS DATE) AS Call_Date 
         , SUM(Revenue) as RevenueTotals 
         , SUM(Cost) as CostTotals 
         , SUM(GROSSPROFIT) AS Gross_Profit 
        FROM  [mediaalpha].[PublisherCallByDay] t 
        WHERE  CAST(t.[CallDate] AS DATE) > CAST(GETDATE() - 90 AS DATE) 
        GROUP BY CAST(t.[CallDate] AS DATE) 
       ) x 
    ) 

SELECT c.Call_Date 
    ,c.RevenueTotals 
    ,c.Avg7Days 
    ,c.Gross_Profit 

FROM Calls c 

WHERE c.Call_Date > CAST(GETDATE() - 90 AS DATE) 

ORDER BY c.Call_Date desc; 

Теги SQL-serversql-сервер-2014 Редактировать Резюме

+0

Это не совсем понятно, что вы пытаетесь сделать здесь. –

+1

Я считаю, что вам нужно проверить [связанные серверы] (http://stackoverflow.com/questions/4091960/sql-server-linked-server-example-query) – TTeeple

+0

Я попробовал ваше предложение, однако это не нравится одинарные кавычки вокруг второй части оператора select. SELECT * FROM OPENQUERY (sqlplus3, SELECT * FROM abs212. [Dbo].[dw_rpt_traffic] –

ответ

0

Я думаю, что лучший способ решить эту проблему, чтобы добавить связанный сервер на сервере, поэтому вы можете вызвать другую базу данных.

Add a linked server

Для этого, вы идете к одному из серверов, а также в папках, которые появляются в корне, есть папка «Объекты сервера», когда-то внутри, разверните Связанные серверы папки. Там вы можете добавить новый связанный сервер, щелкнув правой кнопкой мыши эту папку и выбрав опцию «Новый связанный сервер».

Вы должны заполнить эту информацию, например, если это экземпляр SQL Server или другой.

Наконец, на вкладке Security, необходимо ввести учетные данные (имя пользователя и пароль для входа на сервер), как это показано на следующем рисунке:

Server Connection

После того, как вы готовы с этим, вы можете протестировать новый связанный сервер, щелкнув его правой кнопкой мыши и выбрав «Test Connection».

Если он работает правильно, вы можете позвонить в любую таблицу из этой базы данных, просто указав сервера и таблицы, например:

SELECT Column1, Column2 FROM [ServerName].[DatabaseName].[Schema].[TableName] 

В вашем случае, должно быть что-то вроде

SELECT CAST(t.Create_DTG AS DATE) AS CreateDate 
          , SUM([AGENT_REV]+[ANCHOR_REV]+[CORP_REV]+[OFFSITE_REV]) as RevenueTotals 
          , SUM([MEDIA_EST_COST]+[OTHER_COST]) as COSTTOTALS 
FROM [sqlclus3].[ABC342].[dbo].[dw_rpt_traffic] 
Смежные вопросы