2016-04-25 18 views
-1

2つの異なるサーバから2つの別々のデータベースを使用するために、次のSQL 2014クエリセットを変更する必要があります。1つのクエリ内で2つの異なるSQLデータベースを使用する

収益合計の合計に基づいて過去7日間の平均を計算する前に、2つのデータベース間の合計収益、総費用、&総粗利益を最初に決定する必要があります。私が使用している現在の機能は、両方のデータベースから合計収入合計を使用していないことを除いて、うまく動作します。[dbo_rpt_traffic] & [mediaalpha]

テーブルを結合する必要があります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文の2番目の部分を一重引用符で囲みます。 SELECT * FROM OPENQUERY(sqlplus3、SELECT * FROM abs212。[dbo]。[dw_rpt_traffic] –

答えて

0

私はこの問題を解決する最良の方法は、サーバーにリンクサーバーを追加することだと思います、他のデータベースを呼び出すことができます。このため

Add a linked server

リンクサーバーのフォルダを展開し、あなたはサーバの1つに移動し、根の中に表示されるフォルダに、「サーバ・オブジェクト」フォルダには、一度内部に、そこにあります。ここでは、このフォルダを右クリックし、[新しいリンクサーバー]オプションを選択して、新しいリンクサーバーを追加できます。

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] 
関連する問題