我想在 PLSQL 中運行查詢以獲取過去六個月內資料表中的銷售數量總和,并將其按月分配給列。
到目前為止,我做了這段代碼來選擇我想要的資料
SELECT
*
FROM
(
select
CATALOG_NO as PartNo,
to_char(INVOICE_DATE, 'MM') as tday,
sum(INVOICED_QTY) as qty
from
db.INV_ITEM_JOIN
WHERE
upper(CATALOG_GROUP) = upper('SPAM')
AND INVOICE_DATE between add_months(
trunc(sysdate, 'mm'),
-6
)
and last_day(
add_months(
trunc(sysdate, 'mm'),
-1
)
)
group by
to_char(INVOICE_DATE, 'MM'),
CATALOG_NO
order by
CATALOG_NO
)
然后我得到結果,并創建 PIVOT 我在選擇查詢之后添加了這段代碼
PIVOT (
SUM(qty) FOR TDAY IN (
01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11,
12
)
)
因此,一旦我添加它,它就會以PartNo, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 的形式回傳表格12
。
但資料只到10 11 12月份,其他沒有填寫。我可以尋求幫助來解決這個問題。
uj5u.com熱心網友回復:
TO_CHAR(INVOICE_DATE, 'MM') 輸出一個零填充的兩位數字串,因此您可以使用:
PIVOT (
SUM(qty) FOR TDAY IN (
'01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'
)
)
或者,使用EXTRACT(MONTH FROM invoice_date)代替,TO_CHAR然后您可以使用數值:
SELECT *
FROM (
select CATALOG_NO as PartNo,
EXTRACT(MONTH FROM INVOICE_DATE) as tday,
sum(INVOICED_QTY) as qty
from db.INV_ITEM_JOIN
WHERE upper(CATALOG_GROUP) = 'SPAM'
AND INVOICE_DATE >= add_months(trunc(sysdate, 'mm'), -6)
AND INVOICE_DATE < trunc(sysdate, 'mm')
GROUP BY
EXTRACT(MONTH FROM INVOICE_DATE),
CATALOG_NO
order by
CATALOG_NO
)
PIVOT (
SUM(qty) FOR TDAY IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
)
作為旁白:
INVOICE_DATE between add_months(trunc(sysdate, 'mm'), -6)
and last_day(add_months(trunc(sysdate, 'mm'), -1))
將排除具有上個月最后一天 00:00:01 到 23:59:59 的時間分量的值。如果要包括整個范圍,請使用:
AND INVOICE_DATE >= add_months(trunc(sysdate, 'mm'), -6)
AND INVOICE_DATE < trunc(sysdate, 'mm')
db<>在這里擺弄
uj5u.com熱心網友回復:
它的回傳值只有兩位數,我可以將其轉換為 var char 并嘗試對您有所幫助。其他明智的請在此處提及您的樞軸查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/406505.html
標籤:
上一篇:為什么用戶定義型別別的靜態和區域變數的合成默認建構式的行為不同?
下一篇:SQL對存在的十年記錄進行計數
