我希望有一个想法,以最好的方式来解决我正在尝试做的事情。
我有一张包含交易清单的表格。每个事务都有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 :(得分:1)
您应该能够消除子查询并使用这样的连接:
SELECT Transactions.PostDate, Transactions.TranKey, Transactions.CustKey, FiscPer
FROM Transactions
INNER JOIN FiscalPeriod ON (PostDate BETWEEN StartDate AND EndDate)
虽然这不完全相同 - 即使财务表未涵盖postdate,子查询也会显示所有记录,如果需要,请将此连接更改为LEFT JOIN。
答案 1 :(得分: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.FiscPer
,distinct
关键字无效