Office中國論壇/Access中國論壇

標(biāo)題: 如何讓一個表胖起來——淺談交叉表查詢和聯(lián)合查詢 [打印本頁]

作者: roych    時間: 2024-1-20 02:23
標(biāo)題: 如何讓一個表胖起來——淺談交叉表查詢和聯(lián)合查詢
      對于一個人來說,胖起來就是變寬,比如,腰圍變寬了,以前我的褲腰是28碼,現(xiàn)在32碼。要說體重沒增加,我估計沒人會信。      大多數(shù)情況下,增肥其實并不難。少運動,少動腦,多吃多睡,不熬夜,很快就會胖起來。
      而對于表來說,”胖“起來 當(dāng)然是將它變成寬表(不了解寬表的版友,請移步這里)了。
      最直接的方法就是用交叉表查詢。眾所周知,交叉表查詢將一列(字段)轉(zhuǎn)為列標(biāo)題后,想不寬都難。
      但如果已經(jīng)是寬表了,又應(yīng)該如何處理?
[attach]64735[/attach]
      比如,如何將上圖轉(zhuǎn)為下圖?
[attach]64736[/attach]
      這問題就像在問:如何讓一個180斤的胖子,變成320斤的相撲選手。
      雖然聽起來很難,但實際上,稍作思考,我們就會有答案了。這些A、B之類,來自于科目的選項內(nèi)容。因此,需要將科目名稱和選項內(nèi)容分別作為兩列,然后進(jìn)行拼接。拼接完成后,再進(jìn)行統(tǒng)計即可。
      選項內(nèi)容已經(jīng)存在了,也就是”語數(shù)英物化“這幾列。但科目名稱是沒有的,因此,需要自定義創(chuàng)建一列。第一個查詢大致是這樣的:
  1. SELECT 班級, 題號, 語 as 選項, "語文" AS 科目
  2. FROM b
復(fù)制代碼
     考慮到不止”語文“一個選項。因此最終的查詢應(yīng)該是一個聯(lián)合查詢:
  1. SELECT 班級, 題號, 語 as 選項, "語文" AS 科目
  2. FROM b
  3. union all
  4. SELECT 班級, 題號, 數(shù) as 選項, "數(shù)學(xué)" AS 科目
  5. FROM b
  6. union all
  7. SELECT 班級, 題號, 英 as 選項, "英語" AS 科目
  8. FROM b
  9. union all
  10. SELECT 班級, 題號, 物 as 選項, "物理" AS 科目
  11. FROM b
  12. UNION ALL SELECT 班級, 題號, 化 as 選項, "化學(xué)" AS 科目
  13. FROM b;
復(fù)制代碼
     創(chuàng)建完的聯(lián)合查詢是這樣的:
[attach]64737[/attach]
      不但沒胖,反而更”瘦“(長)了。接下來怎么辦?
      沒錯,就是將這個瘦子變胖:
[attach]64738[/attach]
最終結(jié)果如附件所示:
[attach]64739[/attach]

這里給大家一個思路,當(dāng)寬表不好轉(zhuǎn)化為交叉表查詢時,不妨先使用聯(lián)合查詢,轉(zhuǎn)為長表,再轉(zhuǎn)為交叉表查詢。
最后留一個作業(yè)題。如果用iif,能否達(dá)成這個效果?如果能,請完成后上傳附件,并說明用iif處理和交叉表查詢處理的區(qū)別。

作者: tmtony    時間: 2024-1-22 09:56
不錯的技巧!!
作者: zhengjialon    時間: 2024-1-23 08:57
查詢結(jié)果有256列的限制嗎?




歡迎光臨 Office中國論壇/Access中國論壇 (http://www.mzhfr.cn/) Powered by Discuz! X3.3