2016-04-25 37 views
-1

我需要修改以下sql 2014组查询以使用来自2个不同服务器的两个单独的数据库。使用1个查询中的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 

旧代码

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实例或其他信息。

最后,在安全选项卡,必须输入凭据(用户名和密码登录服务器),喜欢它的下一个图像中的真实所示:

Server 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] 
相关问题