如何添加缺少的月份并將總付款額顯示為0
我已經嘗試了row_number,但它似乎不起作用
查詢:
select brgy,
datename(month,month_dt) as month_dt,
支付總額
from brgypayment
order by brgy, month(month_dt)
結果:
brgy month_dt TotalPayment
barangay1 January 5345.00
. barangay1 二月 34232.00
barangay1 三月 53454.00
barangay1 四月 25234.00
barangay1 五月 43224.00
Barangay1 六月 14. Barangay1 六月 14.00
Barangay1 七月 141.00
Barangay1 八月 4415. Barangay1 八月 4415.00
Barangay1 九月 5455.00
Barangay1 十月 1235.00
Barangay1 十一月 53535.00
Barangay1 十二月 1661.00
Barangay2 一月 97859.00
barangay2 二月 5673.00
barangay2 三月 78764.00
Barangay2 四月 84673.00
Barangay2 五月 63468.00
Barangay2 六月 6365.00
Barangay2 七月 2145.00
Barangay2八月4415.00
Barangay2九月62652.00
Barangay2 10月24521.00
Barangay3 1月52345.00
barangay3 二月 15454.00
目標結果:
brgy month_dt TotalPayment
barangay1 January 5345.00
barangay1 二月 34232.00
barangay1 三月 53454.00
barangay1 四月 25234.00
barangay1 五月 43224.00
Barangay1 六月 14. Barangay1 六月 14.00
Barangay1 七月 141.00
Barangay1 八月 4415. Barangay1 八月 4415.00
Barangay1 九月 5455.00
Barangay1 十月 1235.00
Barangay1 十一月 53535.00
Barangay1 十二月 1661.00
Barangay2 一月 97859.00
barangay2 二月 5673.00
barangay2 三月 78764.00
Barangay2 四月 84673.00
Barangay2 五月 63468.00
Barangay2 六月 6365.00
Barangay2 七月 2145.00
Barangay2八月4415.00
Barangay2九月62652.00
Barangay2 十月 24521.00
Barangay2 十一月 0.00
Barangay2 十二月 0.00
Barangay3 一月 52345.00
Barangay3 二月 15454.00
Barangay3 三月 0.00
Barangay3四月 0.00
Barangay3五月 0.00
Barangay3六月 0.00
Barangay3 七月 0.00
Barangay3 八月 0.00
Barangay3 九月 0.00
Barangay3 十月 0.00
barangay3 十一月 0.00
barangay3 十二月 0.00
uj5u.com熱心網友回復:
為了生成'brgy'和月份的每個組合,這個CROSS JOIN的虛擬表被稱為'months_cte',包含序列1, 2, ..., 12與'brgy'的DISTINCT值。 像這樣
drop TABLE if exists #brgypayment;
去
CREATE TABLE #brgypayment (
brgy VARCHAR(40)。
month_dt date,
TotalPayment decimal(10,2) 。)
INSERT INTO #brgypayment VALUES
('barangay1'/span>, '2021-01-01'/span>, 5345.00)
, ('barangay1'/span>, '2021-02-01'/span>, 123.00)
, ('barangay1'/span>, '2021-05-01'/span>, 8000.00)
, ('barangay1'/span>, '2021-07-01'/span>, 34.00)
, ('barangay2', '2021-09-01', 111.00)
, ('barangay2'/span>, '2021-11-01'/span>, 2000.00)
, ('barangay2', '2021-12-01', 134.00) 。
與
unq_brgy_cte(brgy) as (
select distinct brgy
from #brgypayment)。)
months_cte(n) as (
select *
from (values (1), (2),(3),(4), (5), (6), (7), (8), (9)。 (10),(11),(12)) v(n)
select ub.brgy, datename(month, dateadd(month, m.n-1, 0) month_dt,
isnull(bp.TotalPayment, 0) TotalPayment
from unq_brgy_cte ub
cross join months_cte m
left join #brgypayment bp on ub.brgy= bp.brgy
and m.n=month(bp.month_dt)
order by ub.brgy, m.n。
uj5u.com熱心網友回復:
假設你有一個用于報告的不同brgy名稱的串列,你可以動態地生成你的月份,然后CROSS JOIN它們與感興趣的brgy的串列。 現在,您可以將該串列與您的資料進行 LEFT JOIN,以產生所有的brgy/month 對,無論您的資料是否有每個brgy 的每個月。
這只是一種動態方法。 你甚至可以創建一個要使用的靜態月份串列。
這里有一個作業測驗案例:
WITH months (month, monthname) as (
SELECT 1 , DATENAME(month, DATEADD(月, 0, 0) UNION ALLSELECT month 1, DATENAME(month, DATEADD(month, month, 0)
FROM月份
WHERE month </span> 12
)
,串列 AS (
SELECT b.*, m.*.
FROM月 ASm.
, (SELECT DISTINCT bname FROM brgydata) AS b
)
SELECT l.bname, l.monthname, COALESCE(b.amount, 0.0) as amount
FROM list AS l
LEFT JOIN brgydata AS b
ON b.bname = l.bname
AND b.monthname = l.monthname
ORDER BY l.bname, l.month
;
請看下面的測驗案例中的一個小例子:
資料:
。資料:
----------- --------- >
| bname | monthname | amount |
----------- ----------- ---------
| barangay1 | January | 5345.00 |
| barangay1 | February | 123.00 |
| barangay1 | 五月 | 8000.00 |
| barangay2 | 一月 | 34.00 |
| barangay2 | 2月 | 111.00 |
| barangay2 | 六月 | 2000.00 |
| barangay2 | 10月 | 134.00 |
----------- ----------- ---------
結果:
----------- ---------
| bname | monthname | amount |
----------- ----------- ---------
| barangay1 | January | 5345.00 |
| barangay1 | February | 123.00 |
| barangay1 | 三月 | 0.00 |
| barangay1 | 四月 | 0.00 |
| barangay1 | 五月 | 8000.00 |
| barangay1 | 六月 | 0.00 |
| barangay1 | 七月 | 0.00 |
| barangay1 | 八月 | 0.00 |
| barangay1 | 九月 | 0.00 |
| barangay1 | 10月 | 0.00 |
| barangay1 | 十一月 | 0.00 |
| barangay1 | 十二月 | 0.00 |
| barangay2 | 一月 | 34.00 |
| barangay2 | 2月 | 111.00 |
| barangay2 | 3月 | 0.00 |
| barangay2 | 四月 | 0.00 |
| barangay2 | 五月 | 0.00 |
| barangay2 | 六月 | 2000.00 |
| barangay2 | 七月 | 0.00 |
| barangay2 | 八月 | 0.00 |
| barangay2 | 九月 | 0.00 |
| barangay2 | 10月 | 134.00 |
| barangay2 | 十一月 | 0.00 |
| barangay2 | 十二月 | 0.00 |
----------- ----------- ---------
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/311093.html
標籤:
下一篇:修改和驗證資料表c#中的欄位
