技術(shù) 點(diǎn)
- 技術(shù)
- 點(diǎn)
- V幣
- 點(diǎn)
- 積分
- 22799
|
對(duì)于一個(gè)人來說,胖起來就是變寬,比如,腰圍變寬了,以前我的褲腰是28碼,現(xiàn)在32碼。要說體重沒增加,我估計(jì)沒人會(huì)信。 大多數(shù)情況下,增肥其實(shí)并不難。少運(yùn)動(dòng),少動(dòng)腦,多吃多睡,不熬夜,很快就會(huì)胖起來。
而對(duì)于表來說,”胖“起來 當(dāng)然是將它變成寬表(不了解寬表的版友,請(qǐng)移步這里)了。
最直接的方法就是用交叉表查詢。眾所周知,交叉表查詢將一列(字段)轉(zhuǎn)為列標(biāo)題后,想不寬都難。
但如果已經(jīng)是寬表了,又應(yīng)該如何處理?
比如,如何將上圖轉(zhuǎn)為下圖?
這問題就像在問:如何讓一個(gè)180斤的胖子,變成320斤的相撲選手。
雖然聽起來很難,但實(shí)際上,稍作思考,我們就會(huì)有答案了。這些A、B之類,來自于科目的選項(xiàng)內(nèi)容。因此,需要將科目名稱和選項(xiàng)內(nèi)容分別作為兩列,然后進(jìn)行拼接。拼接完成后,再進(jìn)行統(tǒng)計(jì)即可。
選項(xiàng)內(nèi)容已經(jīng)存在了,也就是”語數(shù)英物化“這幾列。但科目名稱是沒有的,因此,需要自定義創(chuàng)建一列。第一個(gè)查詢大致是這樣的:
- SELECT 班級(jí), 題號(hào), 語 as 選項(xiàng), "語文" AS 科目
- FROM b
復(fù)制代碼 考慮到不止”語文“一個(gè)選項(xiàng)。因此最終的查詢應(yīng)該是一個(gè)聯(lián)合查詢:
- SELECT 班級(jí), 題號(hào), 語 as 選項(xiàng), "語文" AS 科目
- FROM b
- union all
- SELECT 班級(jí), 題號(hào), 數(shù) as 選項(xiàng), "數(shù)學(xué)" AS 科目
- FROM b
- union all
- SELECT 班級(jí), 題號(hào), 英 as 選項(xiàng), "英語" AS 科目
- FROM b
- union all
- SELECT 班級(jí), 題號(hào), 物 as 選項(xiàng), "物理" AS 科目
- FROM b
- UNION ALL SELECT 班級(jí), 題號(hào), 化 as 選項(xiàng), "化學(xué)" AS 科目
- FROM b;
復(fù)制代碼 創(chuàng)建完的聯(lián)合查詢是這樣的:
不但沒胖,反而更”瘦“(長)了。接下來怎么辦?
沒錯(cuò),就是將這個(gè)瘦子變胖:
最終結(jié)果如附件所示:
這里給大家一個(gè)思路,當(dāng)寬表不好轉(zhuǎn)化為交叉表查詢時(shí),不妨先使用聯(lián)合查詢,轉(zhuǎn)為長表,再轉(zhuǎn)為交叉表查詢。
最后留一個(gè)作業(yè)題。如果用iif,能否達(dá)成這個(gè)效果?如果能,請(qǐng)完成后上傳附件,并說明用iif處理和交叉表查詢處理的區(qū)別。
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號(hào)?注冊(cè)
x
|