有如下一張表

如何在視圖查詢的時候顯示以下效果

查了網上一些例子,發現MYSQL不支持grouping.
uj5u.com熱心網友回復:
首先,需要給原表加一個分類(TYPE),相同分類的的資料,統計到一個合計里。然后單獨寫一個查詢,用來回傳所有的合計。
最后用查詢合計的陳述句UNION ALL原表。
SELECT * FROM (
SELECT T1.*,1 Y FROM TABLE_NAME T1
UNION ALL
SELECT T2.*,2 Y FROM TABLE_NAME T2 GOURP BY T2.TYPE
) T ORDER BY T.TYPE,T.Y ;
最后的ORDER BY是為了保證相同分類(TYPE)的資料在一起,Y是為了保證基礎資料在前,統計資料在后。
uj5u.com熱心網友回復:
光用查詢是達不到你這么完美的,就算用Group By With Rollup也達不到你想要的效果。要想寫跟你一樣的,需要寫一個函式,回傳一張表,
然后函式里面把匯率資料一個一個寫到表里面去。
uj5u.com熱心網友回復:
用游標回圈最小日期累加小于等于最大日期,插入到臨時表uj5u.com熱心網友回復:
思路就是有兩個查詢,分別統計按月的,和按年的,小計的話給一個最大的月的天數,比如2019-03-31,這樣他一定排在每個月的最后面;總計就給一個最大的月份數,比如2019-13-01;然后把詳細,小計,總計union all起來,在按日期正序排列,eg:select * from(
select * from t1
UNION ALL
select CONCAT(DATE_FORMAT(date,'yyyy-MM'),'-32') date,'小計' goods,'' sale,'' remain,sum(profit) profit from t1 GROUP BY DATE_FORMAT(date,'yyyy-MM')
UNION ALL
select CONCAT(DATE_FORMAT(date,'yyyy'),'13-01') date,'總計' goods,'' sale,'' remain,sum(profit) profit from t1
) order by date
uj5u.com熱心網友回復:
以上,不需要修改原表,添加的分類(TYPE)只是在查詢陳述句中添加。直接查詢即可,其實并不復雜。
uj5u.com熱心網友回復:
with tmp as(select date '2019-03-05' as p_date,
'電腦' as p_good,
4 as p_salnum,
6 as p_stock,
100 as p_money
from dual
union all
select date '2019-03-09', '手機', 3, 5, 200
from dual
union all
select date '2019-04-10', '列印機', 3, 4, 360
from dual
union all
select date '2019-04-15', '冰箱', 2, 5, 250
from dual),
tmp1 as
(select tmp.*,
trunc(tmp.p_date, 'mm') p_month,
trunc(tmp.p_date, 'yyyy') as p_year
from tmp)
select P_DATE, P_GOOD, P_SALNUM, P_STOCK, P_MONEY
from tmp1
union all
select add_months(tmp1.p_month, 1) as P_DATE,
null as P_GOOD,
null as P_SALNUM,
null as P_STOCK,
sum(P_MONEY)
from tmp1
group by tmp1.p_month
union all
select add_months(tmp1.p_year, 12) as P_DATE,
null as P_GOOD,
null as P_SALNUM,
null as P_STOCK,
sum(P_MONEY)
from tmp1
group by tmp1.p_year
order by p_date
這個是oracle版本的一種思路,供參考。就是構造出你需要匯總的資料即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/62385.html
標籤:MySQL
