日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

交叉表查询中的多列显示

發(fā)布時間:2023/12/3 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 交叉表查询中的多列显示 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

利用交叉表,我們可以對某個列字段的項目進行顯示,比如[學科]來顯示[考試成績],那么是否能同時顯示其[作業(yè)成績]在同一個交叉表查詢中?

比如下面數(shù)據(jù)
Table3
+-----+--------+-------+-------+------+-------------+
|id? ?|sName? ?|sClass |Course |Score |homeworkScore|
+-----+--------+-------+-------+------+-------------+
|1? ? |AAA? ???|3? ?? ?|語文? ?|50? ? |8? ?? ?? ?? ?|
|2? ? |AAA? ???|3? ?? ?|數(shù)學? ?|83? ? |9? ?? ?? ?? ?|
|3? ? |AAA? ???|3? ?? ?|英語? ?|65? ? |7? ?? ?? ?? ?|
|4? ? |BBB? ???|3? ?? ?|語文? ?|86? ? |6? ?? ?? ?? ?|
|5? ? |BBB? ???|3? ?? ?|數(shù)學? ?|95? ? |5? ?? ?? ?? ?|
.......
|30? ?|JJJJ? ? |5? ?? ?|英語? ?|61? ? |9? ?? ?? ?? ?|
|31? ?|LL? ?? ?|5? ?? ?|語文? ?|80? ? |7? ?? ?? ?? ?|
|32? ?|LL? ?? ?|5? ?? ?|數(shù)學? ?|95? ? |9? ?? ?? ?? ?|
+-----+--------+-------+-------+------+-------------+

我們可以得到關于科目的交叉表查詢 [考試成績],也可以得到[作業(yè)成績]

TRANSFORM Sum(Table3.Score)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;

+-------+------+----+----+----+
|sName??|sClass|數(shù)學|英語|語文|
+-------+------+----+----+----+
|AAA? ? |3? ???|83??|65??|50??|
|BBB? ? |3? ???|95??|58??|86??|
|CCC? ? |3? ???|75??|78??|92??|
|DDD? ? |3? ???|76??|77??|83??|
.....
|JJJJ? ?|5? ???|97??|61??|62??|
|LL? ???|5? ???|95??|? ? |80??|
+-------+------+----+----+----+

TRANSFORM Sum(Table3.homeworkScore)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;
+-------+------+----+----+----+
|sName??|sClass|數(shù)學|英語|語文|
+-------+------+----+----+----+
|AAA? ? |3? ???|8? ?|6? ?|8? ?|
|BBB? ? |3? ???|6? ?|7? ?|7? ?|
|CCC? ? |3? ???|7? ?|9? ?|9? ?|
.....
|JJJJ? ?|5? ???|9? ?|7? ?|5? ?|
|LL? ???|5? ???|7? ?|? ? |8? ?|
+-------+------+----+----+----+

那么如何把這兩項合并顯示呢?

首先容易想到的方法是,將這兩個單獨的交叉表查詢保存了各自的查詢,比如query1,query2,然后再形成基于這兩個 query1,query2 的 inner join 查詢。
SELECT Query1.*, Query2.*
FROM Query1 INNER JOIN Query2 ON Query1.sName = Query2.sName;

由于 交叉表查詢 的列數(shù)我們無法預知,所以只能選擇 Query1.*, Query2.* 所有的字段。結果如下
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+
|Q1.sName|Q1.sClass|Q1.數(shù)學|Q1.英語|Q1.語文|Q2.sName|Q2.sClass|Q2.數(shù)學|Q2.英語|Q2.語文|
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+
|AAA? ???|3? ?? ???|83? ???|65? ???|50? ???|AAA? ???|3? ?? ???|8? ?? ?|6? ?? ?|8? ?? ?|
|BBB? ???|3? ?? ???|95? ???|58? ???|86? ???|BBB? ???|3? ?? ???|6? ?? ?|7? ?? ?|7? ?? ?|
|CCC? ???|3? ?? ???|75? ???|78? ???|92? ???|CCC? ???|3? ?? ???|7? ?? ?|9? ?? ?|9? ?? ?|
|DDD? ???|3? ?? ???|76? ???|77? ???|83? ???|DDD? ???|3? ?? ???|7? ?? ?|6? ?? ?|9? ?? ?|
|EEE? ???|3? ?? ???|76? ???|58? ???|60? ???|EEE? ???|3? ?? ???|5? ?? ?|8? ?? ?|5? ?? ?|
|FFF? ???|4? ?? ???|62? ???|60? ???|85? ???|FFF? ???|4? ?? ???|7? ?? ?|7? ?? ?|7? ?? ?|
|GGG? ???|4? ?? ???|80? ???|97? ???|81? ???|GGG? ???|4? ?? ???|6? ?? ?|10? ???|8? ?? ?|
|HHHH? ? |4? ?? ???|88? ???|50? ???|74? ???|HHHH? ? |4? ?? ???|8? ?? ?|9? ?? ?|8? ?? ?|
|IIIIIII |4? ?? ???|68? ???|50? ???|95? ???|IIIIIII |4? ?? ???|5? ?? ?|7? ?? ?|8? ?? ?|
|JJJJ? ? |5? ?? ???|97? ???|61? ???|62? ???|JJJJ? ? |5? ?? ???|9? ?? ?|7? ?? ?|5? ?? ?|
|LL? ?? ?|5? ?? ???|95? ???|? ?? ? |80? ???|LL? ?? ?|? ?? ?? ?|7? ?? ?|? ?? ? |8? ?? ?|
+--------+---------+-------+-------+-------+--------+---------+-------+-------+-------+

有沒有其它的方法?
如果用戶的需求只是為了顯示,(交叉表查詢好象也只能為了顯示,無法更新,想不出還有什么用途), 則可以通過字符串合并操作把多個字段合并為一個字段。如下 (由于是字符串,這里改sum()為min())

TRANSFORM min(Table3.Score & ' + ' & Table3.homeworkScore)
SELECT Table3.sName, Table3.sClass
FROM Table3
GROUP BY Table3.sName, Table3.sClass
PIVOT Table3.Course;

+-------+------+-------+-------+-------+
|sName??|sClass|數(shù)學? ?|英語? ?|語文? ?|
+-------+------+-------+-------+-------+
|AAA? ? |3? ???|83 + 8 |65 + 6 |50 + 8 |
|BBB? ? |3? ???|95 + 6 |58 + 7 |86 + 7 |
|CCC? ? |3? ???|75 + 7 |78 + 9 |92 + 9 |
|DDD? ? |3? ???|76 + 7 |77 + 6 |83 + 9 |
|EEE? ? |3? ???|76 + 5 |58 + 8 |60 + 5 |
|FFF? ? |4? ???|62 + 7 |60 + 7 |85 + 7 |
|GGG? ? |4? ???|80 + 6 |97 + 10|81 + 8 |
|HHHH? ?|4? ???|88 + 8 |50 + 9 |74 + 8 |
|IIIIIII|4? ???|68 + 5 |50 + 7 |95 + 8 |
|JJJJ? ?|5? ???|97 + 9 |61 + 7 |62 + 5 |
|LL? ???|5? ???|95 + 7 |? ?? ? |80 + 8 |
+-------+------+-------+-------+-------+

如果還要計算,比如導入到EXCEL中,則需要把多列按 交叉表查詢 的要求整理一下數(shù)據(jù)源。

select sName,sClass,Course & ':考試成績' as sColID,Score as vCol
from Table3
UNION ALL
select sName,sClass,Course & ':作業(yè)成績' as sColID,homeworkScore as vCol
from Table3
+-----+------+--------------+-----+
|sName|sClass|sColID? ?? ???|vCol |
+-----+------+--------------+-----+
|AAA??|3? ???|數(shù)學:考試成績 |83? ?|
|AAA??|3? ???|英語:考試成績 |65? ?|
|BBB??|3? ???|語文:考試成績 |86? ?|
|BBB??|3? ???|數(shù)學:考試成績 |95? ?|
|AAA??|3? ???|語文:考試成績 |50? ?|
|AAA??|3? ???|數(shù)學:作業(yè)成績 |8? ? |
|AAA??|3? ???|英語:作業(yè)成績 |6? ? |
|BBB??|3? ???|語文:作業(yè)成績 |7? ? |
|BBB??|3? ???|數(shù)學:作業(yè)成績 |6? ? |
........? ?? ?? ?? ?? ?? ?
|LL? ?|5? ???|語文:作業(yè)成績 |8? ? |
|LL? ?|5? ???|數(shù)學:作業(yè)成績 |7? ? |
+-----+------+--------------+-----+

然后再基于此做交叉查詢.
TRANSFORM Sum(t.vCol)
SELECT t.sName, t.sClass
FROM (
select sName,sClass,Course & ':考試成績' as sColID,Score as vCol
from Table3
UNION ALL
select sName,sClass,Course & ':作業(yè)成績' as sColID,homeworkScore as vCol
from Table3
)t
GROUP BY t.sName, t.sClass
PIVOT t.sColID;

+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+
|sName??|sClass|數(shù)學:作業(yè)成績|數(shù)學:考試成績|英語:作業(yè)成績|英語:考試成績|語文:作業(yè)成績|語文:考試成績|
+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+
|AAA? ? |3? ???|8? ?? ?? ?? ?|83? ?? ?? ???|6? ?? ?? ?? ?|65? ?? ?? ???|8? ?? ?? ?? ?|50? ?? ?? ???|
|BBB? ? |3? ???|6? ?? ?? ?? ?|95? ?? ?? ???|7? ?? ?? ?? ?|58? ?? ?? ???|7? ?? ?? ?? ?|86? ?? ?? ???|
|CCC? ? |3? ???|7? ?? ?? ?? ?|75? ?? ?? ???|9? ?? ?? ?? ?|78? ?? ?? ???|9? ?? ?? ?? ?|92? ?? ?? ???|
|DDD? ? |3? ???|7? ?? ?? ?? ?|76? ?? ?? ???|6? ?? ?? ?? ?|77? ?? ?? ???|9? ?? ?? ?? ?|83? ?? ?? ???|
|EEE? ? |3? ???|5? ?? ?? ?? ?|76? ?? ?? ???|8? ?? ?? ?? ?|58? ?? ?? ???|5? ?? ?? ?? ?|60? ?? ?? ???|
|FFF? ? |4? ???|7? ?? ?? ?? ?|62? ?? ?? ???|7? ?? ?? ?? ?|60? ?? ?? ???|7? ?? ?? ?? ?|85? ?? ?? ???|
|GGG? ? |4? ???|6? ?? ?? ?? ?|80? ?? ?? ???|10? ?? ?? ???|97? ?? ?? ???|8? ?? ?? ?? ?|81? ?? ?? ???|
|HHHH? ?|4? ???|8? ?? ?? ?? ?|88? ?? ?? ???|9? ?? ?? ?? ?|50? ?? ?? ???|8? ?? ?? ?? ?|74? ?? ?? ???|
|IIIIIII|4? ???|5? ?? ?? ?? ?|68? ?? ?? ???|7? ?? ?? ?? ?|50? ?? ?? ???|8? ?? ?? ?? ?|95? ?? ?? ???|
|JJJJ? ?|5? ???|9? ?? ?? ?? ?|97? ?? ?? ???|7? ?? ?? ?? ?|61? ?? ?? ???|5? ?? ?? ?? ?|62? ?? ?? ???|
|LL? ???|5? ???|7? ?? ?? ?? ?|95? ?? ?? ???|? ?? ?? ?? ? |? ?? ?? ?? ? |8? ?? ?? ?? ?|80? ?? ?? ???|
+-------+------+-------------+-------------+-------------+-------------+-------------+-------------+

本文只是探討了一種在ACCESS中如何實現(xiàn)多列數(shù)據(jù)同樣在交叉查詢表中實現(xiàn)的方法。當然還有很多方法。

總結

以上是生活随笔為你收集整理的交叉表查询中的多列显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。