>

다른 데이터베이스의 데이터를 내부 조인해야합니다. 정확히 3입니다.

다른 데이터베이스에서 Select 문을 시도했지만 어떤 이유로 내부 조인을 작동시킬 수 없습니다.

내가 한 번에 3 개를 모두 수행하는 대신 한 번에 하나씩 참여해야합니까? 까다로운 부분은 첫 번째 쿼리의 결과 테이블을 변수에 할당하여 후속 테이블과 내부 조인 할 수 있도록하는 것입니다.

현재 코드

(DECLARE @SDate date = '01/01/2018'
DECLARE @EDate date = '12/31/2018'
DECLARE @Sku TABLE
(
  Sku varchar(20)
);
INSERT @Sku (Sku)
VALUES 
(N'SN2150'),
(N'SN2151'); 
SELECT        
   l.No_ 
  ,SUM(l.Amount) AS Amount
  ,SUM(l.Quantity) AS Quantity
FROM 
  dbo.[Threshold Enterprises$Sales Invoice Line] AS l
  JOIN
   @Sku AS s
    ON s.Sku = l.No_
WHERE
  l.[Shipment Date] BETWEEN @SDate AND @EDate
GROUP BY
  l.No_) 
  AS a

Select [Item.No_] and [Suggested Retail Price] and [Starting Date] FROM [NAV- 
   WH].dbo.v_NAV_PurchasePriceCurrent b
Select [No_] and [Size] and [Size.Type] FROM [NAV-WH].[dbo].[Threshold 
Enterprises$Item] c

Inner Join a b c where a.[@SKU]=b.[Item.No_]=c.[No_]

다음 오류 메시지가 나타납니다

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'DECLARE'.
Msg 102, Level 15, State 1, Line 26
Incorrect syntax near ')'.

SKU, 판매량, 판매량, 소매가, 시작 데이터, 크기 및 크기 유형을 제공 할 수있는 결과를 기대하십시오.

이전 코드를 시도했지만 같은 오류 메시지가 나타납니다

Msg 207, Level 16, State 1, Line 25
Invalid column name 'Item.No_'.

대신 모든 것을 철자하는 데 사용하려고 시도한 코드는 다음과 같습니다.

DECLARE @SDate date = '01/01/2018'
DECLARE @EDate date = '12/31/2018'
DECLARE @Sku TABLE
(
  Sku varchar(20)
);
INSERT @Sku (Sku)
VALUES 
(N'SN2150'),
(N'SN2151'); 
SELECT        
   l.No_ as SKU
  ,SUM(l.Amount) AS Amount
  ,SUM(l.Quantity) AS Quantity
  ,[NAV-WH].[dbo].[v_NAV_PurchasePriceCurrent].[Suggested Retail Price]
  ,[NAV-WH].[dbo].[v_NAV_PurchasePriceCurrent].[Starting Date]
  ,[NAV-WH].[dbo].[ThresholdEnterprises$Item].Size
  ,[NAV-WH].[dbo].[ThresholdEnterprises$Item].[Size.Type]
FROM 
  dbo.[Threshold Enterprises$Sales Invoice Line] AS l
  JOIN @Sku AS s ON s.Sku = l.No_
  JOIN [NAV-WH].[dbo].[v_NAV_PurchasePriceCurrent] on [NAV-WH].[dbo]. 
   [v_NAV_PurchasePriceCurrent].[Item.No_] = l.No_
  JOIN [NAV-WH].[dbo].[ThresholdEnterprises$Item] on [NAV-WH].[dbo]. 
   [ThresholdEnterprises$Item].[No_] = l.No_
WHERE
  l.[Shipment Date] BETWEEN @SDate AND @EDate
GROUP BY
  l.No_

  • 답변 # 1

    모든 데이터베이스가 동일한 인스턴스에있는 경우, 3- 파트 이름을 사용하여 조인 명령문에서 참조하십시오.

    FROM [DB1].[dbo].[TableA] a
    JOIN [DB2].[dbo].[TableB] b on a.Key = b.Key
    LEFT JOIN [DB3].[dbo].[TableC] on c.Key = a.Key
    
    

    데이터베이스가 다른 인스턴스에있는 경우 데이터베이스간에 링크 된 서버를 설정 한 다음 4 가지 이름 ...JOIN [LINKEDSERVER].[DB2].[dbo].[TableB]... 를 사용하십시오.

    이는 쿼리를 실행하는 사용자에게 모든 데이터베이스에 대한 적절한 권한이 있다고 가정합니다.

    편집-원래 질문에 대한 편집 내용을 바탕으로 한 번에 수행하는 것이 좋습니다. 이것을 시도하십시오 (테이블이 모두 없기 때문에 테스트 할 수 없었습니다).

    DECLARE @SDate date = '01/01/2018'
    DECLARE @EDate date = '12/31/2018'
    DECLARE @Sku TABLE
    (
      Sku varchar(20)
    );
    INSERT @Sku (Sku)
    VALUES 
    (N'SN2150'),
    (N'SN2151'); 
    SELECT        
       l.No_ as SKU
      ,SUM(l.Amount) AS Amount
      ,SUM(l.Quantity) AS Quantity
      ,b.[Suggested Retail Price]
      ,b.[Starting Date]
      ,c.Size
      ,c.[Size.Type]
    FROM 
      dbo.[Threshold Enterprises$Sales Invoice Line] AS l
      JOIN @Sku AS s ON s.Sku = l.No_
      JOIN [NAV-WH].[dbo].[v_NAV_PurchasePriceCurrent] b on b.[Item.No_] = l.No_
      JOIN [NAV-WH].[dbo].[ThresholdEnterprises$Item] c on c.[No_] = l.No_
    WHERE
      l.[Shipment Date] BETWEEN @SDate AND @EDate
    GROUP BY
      l.No_
    
    

  • 답변 # 2

    작동시킬 수있었습니다. 간단한 Group By 해결 방법이었습니다. 나를 올바른 방향으로 지적한 사람들에게 감사합니다!

    use [NAV-WH]
    DECLARE @SDate date = '01/01/2018'
    DECLARE @EDate date = '12/31/2018'
    DECLARE @Sku TABLE
    (
      Sku varchar(20)
    );
    INSERT @Sku (Sku)
    VALUES 
    (N'SN2150'),
    (N'SN2151'); 
    
    SELECT [Threshold Enterprises$Item].No_ AS SKU, SUM([Threshold 
    Enterprises$Sales Invoice Line].Amount) AS Amount, SUM([Threshold 
    Enterprises$Sales Invoice Line].Quantity) AS Quantity, 
                             v_NAV_PurchasePriceCurrent.[Suggested Retail Price], 
    v_NAV_PurchasePriceCurrent.[Starting Date], [Threshold Enterprises$Item].Size, 
    [Threshold Enterprises$Item].[Size Type]
    FROM [Threshold Enterprises$Item] INNER JOIN
                             v_NAV_PurchasePriceCurrent ON [Threshold 
    Enterprises$Item].No_ = v_NAV_PurchasePriceCurrent.[Item No_] INNER JOIN
                             [Threshold Enterprises$Sales Invoice Line] ON 
    [Threshold Enterprises$Item].No_ = [Threshold Enterprises$Sales Invoice 
    Line].No_
    WHERE ([Threshold Enterprises$Item].No_ = N'SN2051' OR
                             [Threshold Enterprises$Item].No_ = N'SN2151') AND 
    ([Threshold Enterprises$Sales Invoice Line].[Shipment Date] BETWEEN @SDate AND 
    @EDate)
    GROUP BY [Threshold Enterprises$Item].No_, v_NAV_PurchasePriceCurrent. 
       [Suggested Retail Price], v_NAV_PurchasePriceCurrent.[Starting Date], [Threshold 
    Enterprises$Item].Size, [Threshold Enterprises$Item].[Size Type]
    
    

  • 이전 c# - xamarin 양식 - listview에서 목록을 표시/바인딩하는 방법은 무엇입니까?
  • 다음 ruby on rails - 현재 페이지? 중첩 된 리소스