2016-06-28 85 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 

你期望

应该只返回的行数

我希望这可以帮助

相关问题