嗨我很難在單個查詢中組合兩條記錄(來自單個表)。想法是,DATE_FIELD列是日期類型,ColA是整數數據類型。在一個選擇查詢中組合兩行
爲了進一步說明我的詢問,我附上圖片下面
1)是原始表。 2.)是所需的輸出。
P.S. DATE_FIELD的過濾器不是一個簡單的「WHERE DATE_FIELD IN」子句。
例如,我想獲得DATE_FIELD = 12/30/2013。然後,我需要獲得前九月DATE_FIELD還,這是2013年9月30日通過編程方式使用此查詢,我從網上得到:
CASE
WHEN MONTH(DATE_FIELD) < 10
THEN
(cast(CAST((DATE_FIELD) - 1) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
ELSE
(cast(CAST((YEAR(DATE_FIELD)) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
END
這裏是我當前的SQL腳本(不能得到相當於可樂對於前九月過濾:
SELECT DATE_FIELD, ColA,
CASE
WHEN MONTH(DATE_FIELD) < 10
THEN
(cast(CAST((YEAR(DATE_FIELD) - 1) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
ELSE
(cast(CAST((YEAR(DATE_FIELD)) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
END AS PREVIOUS,
(
SELECT ColA
FROM TABLE_A
WHERE DATE_FIELD =
CASE
WHEN MONTH(DATE_FIELD) < 10
THEN
(cast(CAST((YEAR(DATE_FIELD) - 1) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
ELSE
(cast(CAST((YEAR(DATE_FIELD)) as char(4)) + RIGHT('00' + LTRIM(09),2) + RIGHT('00' + LTRIM(30),2) AS Date))
END
) AS PYE_colA
FROM TABLE_A
WHERE DATE_FIELD = '12/30/2013'
感謝
在這種情況下,國際海事組織,它的問題在那裏此查詢的輸出變,因爲合併數據這種方式並不一定是最優的。如果您計劃向用戶展示,那麼您寧願不將這種方式結合到查詢中,而是結合用戶界面。如果需要進入另一個數據庫,那麼從您的問題中可以看出,數據的基礎是什麼?請不要使用代碼,請用文字解釋您希望如何組合數據(即如何選擇合併在同一行中的日期)。 –
您好奧默,主要目標是獲得所選日期和SEPT等效數據之間的平均值。我將更新圖像以描述如何選擇要組合的行。 – ChiSen
我不明白你如何獲得數據。你從'12/30/2013'開始。該日期有兩條記錄。爲什麼你顯示99而不是0?它與StoreID有什麼關係(你沒有在你的查詢中使用)?那麼你如何從'12/30/2013'到'09/30/2013'?它總是在給定月份的最後一天減去三?或者你如何到達9月,特別是9月30日? –