2013-10-21 17 views
-3

我希望有一个想法来处理我想要做的事情。SQL查询,表中没有公用密钥的返回值

我有一个交易清单。每个交易都有一个DateTime格式的PostDate。我有另一张表格,其中包含财政期间的数值。此表格包含以下列。 FiscalYear,FiscalMonth,StartDate,EndDate。

我想写一个查询,将返回我的交易表中的所有值,以及PostDate的FiscalYear和FiscalMonth。所以我想我只是试图在PostDate落在StartDate和EndDate之间时返回FiscalYear和FiscalMonth值。

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

编辑:对不起,这是我试过的查询。我也改了称呼从“无连接”,以“没有共同的关键”,以更准确地反映我的问题

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 
+0

你可以发布你到目前为止尝试过吗? – Andrew

+0

你可以把你写的sql查询吗? –

+1

发布您的表格结构,样本数据,期望的输出以及您到目前为止尝试的内容 – SriniV

回答

1

您应该能够消除子查询和使用连接这样的:

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

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

+0

我不知道可以像那样使用连接。没有重叠的时段,所以这个工作非常完美,谢谢! – jdenomme19

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关键字将不起作用