2013-10-21 16 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關鍵字將不起作用