-3

我希望有一个想法来解决我正在尝试做的事情的最佳方式。

我有一张包含交易清单的表格。每个事务都有一个 DateTime 格式的 PostDate。我有另一个表格保存会计期间的值。该表具有以下列;财政年度、财政月份、开始日期、结束日期。

我正在尝试编写一个查询,该查询将返回我的事务表中的所有值,以及 PostDate 的 FiscalYear 和 FiscalMonth。所以我想我只是想在 PostDate 介于 StartDate 和 EndDate 之间时返回 FiscalYear 和 FiscalMonth 值。

我尝试过使用 Subbuery,但我对它们的经验很少,并且不断返回一条错误消息,指出子查询返回的值超过 1 个。帮助将不胜感激

编辑:对不起,这是我试过的查询。我也将标题从“with no join”改为“with no common key”,以更准确地反映我的问题

    SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, 
                      (SELECT FiscalPeriod.FiscPer
                        FROM FiscalPeriod
                        WHERE (Transactions.PostDate > CONVERT(Datetime, FiscalPeriod.StartDate, 102)) AND (Transactions.PostDate < CONVERT(DATETIME, FiscalPeriod.EndDate, 102))) AS FisPer
    FROM Transactions 
4

2 回答 2

1

您应该能够消除子查询并使用如下连接:

SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, FiscPer
FROM Transactions 
INNER JOIN FiscalPeriod ON (PostDate BETWEEN StartDate AND EndDate)

尽管这并不完全相同 - 即使财务表未涵盖 postdate,子查询也会显示所有记录,如果需要,将此联接更改为 LEFT JOIN。

于 2013-10-21T16:20:01.493 回答
0

也许您需要将这两个表与一些共同点连接起来,或者执行以下操作:

 SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, 
                      (SELECT **distinct** FiscalPeriod.FiscPer
                        FROM FiscalPeriod
                        WHERE (Transactions.PostDate > CONVERT(Datetime, FiscalPeriod.StartDate, 102)) AND (Transactions.PostDate < CONVERT(DATETIME, FiscalPeriod.EndDate, 102))) AS FisPer
    FROM Transactions 

请记住,如果你有这个: 2004-01
2004-02
2004-03
关键字
将不起作用fiscalperiod.FiscPerdistinct

于 2013-10-21T16:31:07.637 回答