2016-06-28 222 views
-1

好日子 我有兩個表我需要加入,Transfer Excise Tbl和Value EntryJOIN兩個表,但只返回表1匹配表2

轉換費用:不需要與值條目表中的項目編號匹配。我確實做了一個比較項目不在轉讓價格條目中,並找到了一些。

轉移消費TBL:

Starting Date   No_     Excise Location Location Code Unit Rate        Excise Type Code Unit Of Measure Code Litre Conversion Factor 
----------------------- -------------------- --------------- ------------- --------------------------------------- ---------------- -------------------- --------------------------------------- 
2013-02-28 00:00:00.000 600011263   NONBOND   ~DUTY PAID 2.70000000000000000000     UWNEPACK   LITRES    1.33333000000000000000 
2014-02-27 00:00:00.000 600011263   NONBOND   ~DUTY PAID 2.87000000000000000000     UWNEPACK   LITRES    1.33333000000000000000 
2015-02-26 00:00:00.000 600011263   NONBOND   ~DUTY PAID 3.07000000000000000000     UWNEPACK   LITRES    1.33333000000000000000 
2016-02-25 00:00:00.000 600011263   NONBOND   ~DUTY PAID 3.31000000000000000000     UWNEPACK   LITRES    1.33333000000000000000 

值輸入表:

Item No_    Location Code Gen_ Bus_ Posting Group Invoiced Quantity 
-------------------- ------------- ----------------------- --------------------------------------- 
F00330    VINI   EXSA     -10.00000000000000000000 
F00331    VINI   EXSA     -30.00000000000000000000 
F00332    VINI   EXSA     -40.00000000000000000000 

我想寫查詢排除重複如下面的腳本還是創建副本。 PK是產品編號,FK是產地代碼。你會看到,每年爲我的新單位率用於特定項目和地點

SELECT DISTINCT a.[Starting Date], 
    b.[Posting Date], 
    b.[Item No_], 
    b.[Invoiced Quantity], 
    a.[Litre Conversion Factor], 
    a.[Unit Rate] , 
    a.[Location Code], 
    a.[Excise Location], 
    a.[Excise Type Code], 
    a.[Unit Of Measure Code] 
FROM [Transfer Excise Tbl] a JOIN [Spier Live$Value Entry] b 
ON a.[No_] = b.[Item No_] 
WHERE b.[Posting Date] > '2013-02-26 ' 
AND b.[Location Code] = a.[Location Code] 
AND b.[Gen_ Bus_ Posting Group] IN ('LOCA','EXSA') 
AND b.[Posting Date] >= a.[Starting Date] 
AND b.[Invoiced Quantity] <>0 
+0

您可以添加一些DDL併發布預期結果。由於圖像在我的域中被阻止,我無法內聯這些圖像。可以將它們內聯。 – TheGameiswar

+1

「Transfer Excise Tbl:No Value必須與Value Entry表中的Item no匹配」:在我看來,join就是這樣做的。有什麼問題? –

+0

@Kevin我得到了比預期更多的行,因爲我的最終結果是Navision給了我不同數量的行 – user2941071

回答

0

首先被輸送的轉移消費稅表,有什麼不對您的[值輸入表。

1)在您的查詢中,您可以參考[過帳日期]列,但示例數據中沒有這樣的列。

現在,如果我已經很好地理解了這種情況,我認爲你的問題與你如何連接兩個表中的行有關。

我得到的線數比預期的多,因爲您在[數值輸入]中將[數值輸入]中的每一行與[開始日期]中的所有行加在一起,而不僅僅是最後一行(有效)行。

爲了解決你應該預先計算問題的有效期您的[轉移消費TBL]行發現每一行的[結束日期],然後你會
JOIN B [發佈日期] BETWEEN 。一個[起始日期] 一個[結束日期]

最終的查詢將會是這樣的:

;WITH 
EndDates as (-- add [End Date] to [Transfer Excise Tbl] 
    select t1.*, ISNULL([End Date], CONVERT(date, '9999-12-31', 121)) [End Date] 
    from [Transfer Excise Tbl] t1 
    outer apply (
     select MIN([Starting Date]) [End Date] 
     from [Transfer Excise Tbl] 
     where [Starting Date] > t1.[Starting Date] 
    ) T2 
) 
SELECT DISTINCT a.[Starting Date], 
    b.[Posting Date], 
    b.[Item No_], 
    b.[Invoiced Quantity], 
    a.[Litre Conversion Factor], 
    a.[Unit Rate] , 
    a.[Location Code], 
    a.[Excise Location], 
    a.[Excise Type Code], 
    a.[Unit Of Measure Code] 
FROM [EndDates] a JOIN [Spier Live$Value Entry] b ON a.[No_] = b.[Item No_] AND b.[Posting Date] BETWEEN a.[Starting Date] AND a.[End Date] 
WHERE b.[Posting Date] > '2013-02-26 ' 
AND b.[Location Code] = a.[Location Code] 
AND b.[Gen_ Bus_ Posting Group] IN ('LOCA','EXSA')  
AND b.[Invoiced Quantity] <> 0 

你期望

應該只返回的行數

我希望這可以幫助