iT邦幫忙

0

MySQL有關Select排序的問題

今日在研究SQL遇到一些問題研究不出來

先看第一段語法 相當基礎:

SELECT 編號 FROM 資料表;

成果圖:
https://ithelp.ithome.com.tw/upload/images/20200709/20110597yPdqDCx6Yo.png

正常是由上往下排,但我想做到的是往右新增虛擬欄位,然後將資料往右排序。
我後來用CASE有達到效果,請看第二段語法:

SELECT
MAX(CASE 編號 WHEN 'EM00001' THEN 編號  END) '編號1',
MAX(CASE 編號 WHEN 'EM00002' THEN 編號  END) '編號2',
MAX(CASE 編號 WHEN 'EM00003' THEN 編號  END) '編號3', 
MAX(CASE 編號 WHEN 'EM00004' THEN 編號  END) '編號4',
MAX(CASE 編號 WHEN 'EM00005' THEN 編號  END) '編號5', 
MAX(CASE 編號 WHEN 'EM00006' THEN 編號  END) '編號6', 
MAX(CASE 編號 WHEN 'EM00007' THEN 編號  END) '編號7',
MAX(CASE 編號 WHEN 'EM00008' THEN 編號  END) '編號8',
MAX(CASE 編號 WHEN 'EM00009' THEN 編號  END) '編號9',
MAX(CASE 編號 WHEN 'EM00010' THEN 編號  END) '編號10' 
FROM 編號;

成果圖:
https://ithelp.ithome.com.tw/upload/images/20200709/20110597qXhaQiZCqE.png

不過我想做到的是直接Select編號欄位以後拿到全部資料
然後自動就往右建立欄位往右排序,不用像上面每個編號都這樣手動設定(?
研究很久了還是沒有頭緒,不知道怎麼解決,求SQL大神寫個範例指導

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
ckp6250
iT邦好手 1 級 ‧ 2020-07-09 21:24:01

自動就往右建立欄位往右排序

自動應該有點困難,手動或許可行。

試著用 stored procedure 的動態組合欄位吧。

看更多先前的回應...收起先前的回應...

其實他要這樣做的目的是什麼? 很多初學者都會很執著的硬要往某種奇怪的方式去試,但往往是基於一個很久以前的某人跟他說都是這樣做,或是這樣做才是好棒棒,或是某種奇怪的信念,然後寶寶心裡苦,但是寶寶說不出來....
這裡有我以前寫的 補助表的方式
https://ithelp.ithome.com.tw/articles/10137154

ckp6250 iT邦好手 1 級 ‧ 2020-07-10 08:38:41 檢舉

我知道樓主的問題點在於,橫欄的數目是不確定的,
也許有10欄,也許20欄,或100欄,
這種情況之下,除了動態組合欄位可以勝任之外,
我實在想不出其它別的辦法。

殺豬大的【補助表方式】,恐怕沒法解決【不確定欄位數量有幾個】的問題。

是的,補助表應用很多是用來做年度月份,或是單位,地區等固定的分類.
但是不固定欄位的,沒事轉方向幹嘛?

簡單來說,就是拿sql當程式跑。

ckp6250 iT邦好手 1 級 ‧ 2020-07-10 11:45:04 檢舉

簡單來說,就是拿sql當程式跑。

浩大說得對。

不過,若是我遇到有這種【轉方向】的需求時,我也會在sql裡把資料整理好再送回前端,我不想單純撈資料給php去跑轉向的動作。

但是不固定欄位的,沒事轉方向幹嘛?

有一種情況是,我們寫了一支報表,叫做【歷年各類產品銷售額對照表】,第一年時,横欄只有一個年度,到了第二年時,又多了一個年度....這樣一來,每年會多一個年度,程式跑了N年,就會有N個年度,就變成不固定數量欄位了。

這時,若不想每年修改sql程式,就只好用動態sql了。
客戶只要肯出錢,叫我轉方向我就轉方向。不過,99.99%的情況是,只要我一報價,客戶就說【好像也不用這麼麻煩,不轉囉。】

1

我一直覺得這樣子搞很莫明奇妙。
都要拿資料庫當程式跑幹啥呢?

它是資料庫啊,不是給你排版用啊。

你想做排版的動作,就麻煩用程式跑。

啥?沒程式可以輸出。
那那那......(好吧,我無話可說)

回來正題:
其實也並不是不能做到。
只是拿sql語法當程式來跑,一直是我不想教的。
sql就sql。就只要讓它負責資料的統計處理就好。
輸出格式怎麼樣的不要給sql跑,就算他做的到。

我只提示 concat_group 可以辦到你想要的事。
另外就是你目前這一招。

再給你關鍵字「mysql 直轉橫」
我就說到這了,但不要說我教你這樣。因為我很討厭這樣子玩sql。

看更多先前的回應...收起先前的回應...

以前很多報表工具軟體啊.現在好像都不知道有這些東西了.

firecold iT邦新手 1 級 ‧ 2020-07-10 13:41:11 檢舉

星空大建議的沒錯
sql能不要下複雜語法是最好的
能簡單就簡單
呈現格式用程式處理

ckp6250 iT邦好手 1 級 ‧ 2020-07-10 15:01:40 檢舉

我是覺得要站在整體「效能」上來考量,
『複雜的sql+簡單的php』或『複雜的php+簡單的sql』
當使用者按下【確定鍵】之後,誰先跑出來就選誰!

user不會管你用什麼方法,他只要快點拿到報表。

如果依照你的說法,只要快,埋雷沒問題?
且所謂的「效能」又是指什麼?現在的效能?

你要知道一件事,一般來說在開發階段。資料量是很少的情況下。
不需要去考量並存量及使用率。

客戶無知沒關係。就像你說的,他們就是要現在快。
我曾經也遇過工作室的跟我說過。不需要考量那麼多。
反正出問題是以後的事。已經不關他的事了。
是這樣嘛?或許吧

不會說你的點是錯的,現實情況也的確是如此。

ps:其實mysql有所謂的view表可以做到這些事。
而view表認真來說也可以算是mysql的一種格式排板

但我的原則是資料庫做好資料庫的事就好。
像現在orm的機制我就覺得不錯。

我要發表回答

立即登入回答