最近有一個需球要將資料用v-chart畫出堆疊圖,但資料sql table
原本是長這樣
飲料店 |
區域 |
人數 |
CXCX |
台北 |
5 |
CXCX |
桃園 |
4 |
CXCX |
新北 |
2 |
XO嵐 |
台北 |
10 |
XO嵐 |
桃園 |
4 |
XO嵐 |
新北 |
7 |
清X |
台北 |
3 |
清X |
桃園 |
4 |
清X |
新北 |
10 |
要轉成樞紐資料,變成這樣
飲料店 |
台北 |
桃園 |
新北 |
CXCX |
5 |
4 |
2 |
XO嵐 |
10 |
4 |
7 |
清X |
3 |
4 |
10 |
接著用sql語法組動態
產生的話會需要這樣寫
SET SESSION GROUP_CONCAT_MAX_LEN = 10000000;
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('SUM(CASE WHEN c.area = "', c.area,'" AND ',
(CASE WHEN c.total_area IS NOT NULL
THEN CONCAT('c.total_area = ',c.total_area)
ELSE NULL END),
' THEN c.total_area else 0 end) AS ','"',
c.shop_name,'_',c.area,'"'
)
)
INTO @sql
FROM (SELECT b.shop_name,b.area,COUNT(b.area) total_area
FROM drink_shop b
WHERE b.shop_name IS NOT NULL
GROUP BY b.shop_name,b.area) c;
SET @sql = CONCAT('SELECT c.shop_name, ', @sql,
' FROM (SELECT b.shop_name,b.area,
COUNT(b.area) total_area
FROM drink_shop b
WHERE b.shop_name IS NOT NULL
GROUP BY b.shop_name,b.area) c
GROUP BY c.shop_name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
這邊有一個很重要的點!!
如果你GROUP_CONCAT
組出來的字串很長一定要先設定GROUP_CONCAT_MAX_LEN
的長度
預設是1024個字元,一開始我沒注意到一直ERROR,後來SELECT出來看才知道超過1024結果字元都被截斷...
小小工程師林可可 發表在 痞客邦 留言(0) 人氣()
這是我昨天開發時所遇到的問題,因為需求關係,所以將參數(id)儲存像table2
Table1
小小工程師林可可 發表在 痞客邦 留言(0) 人氣()