交叉表的排序
场景:交叉表的排序有关问题
交叉表的排序问题
表1
+----------------+
|选项|姓名 |
+----------------+
|g |zhangyun |
+----------------+
|b |zhangsai |
+----------------+
|c |yetetsai |
+----------------+
|d |tetetete |
+----------------+
|e |aerefdf |
+----------------+
|f |terwrdafd |
+----------------+
|e |fdffaaafd |
+----------------+
|a |gegegeafd |
+----------------+
|q |heherdafd |
+----------------+
表2
+----------------+
|序号|选项 |
+----------------+
|1 |a |
+----------------+
|2 |b |
+----------------+
|3 |c |
+----------------+
|4 |d |
+----------------+
|5 |e |
+----------------+
|6 |f |
+----------------+
|7 |g |
+----------------+
|8 |h |
+----------------+
|9 |i |
+----------------+
|10 |j |
+----------------+
生成的交叉表为
+--------------------------------------------+
|姓名 |b |c |a |e |f |d |
+--------------------------------------------+
|zhangyun|1 |0 |1 |3 |0 |1 |
+--------------------------------------------+
|tetetete|2 |1 |2 |0 |1 |0 |
+--------------------------------------------+
|zvcvgyun|0 |0 |1 |1 |2 |1 |
+--------------------------------------------+
我想让列名按表2的顺序排序
最后变为下面的样子
+--------------------------------------------+
|姓名 |a |b |c |d |e |f |
+--------------------------------------------+
|zhangyun|1 |0 |1 |3 |0 |1 |
+--------------------------------------------+
|tetetete|2 |1 |2 |0 |1 |0 |
+--------------------------------------------+
|zvcvgyun|0 |0 |1 |1 |2 |1 |
+--------------------------------------------+
------解决方案--------------------
try:
TRANSFORM count(*)
SELECT a.姓名
FROM tba AS a LEFT JOIN tbb AS b ON a.选项=b.选项
GROUP BY a.姓名
PIVOT a.选项 in( 'a ', 'b ', 'c ', 'd ', 'e ', 'f ', 'g ');
交叉表的排序问题
表1
+----------------+
|选项|姓名 |
+----------------+
|g |zhangyun |
+----------------+
|b |zhangsai |
+----------------+
|c |yetetsai |
+----------------+
|d |tetetete |
+----------------+
|e |aerefdf |
+----------------+
|f |terwrdafd |
+----------------+
|e |fdffaaafd |
+----------------+
|a |gegegeafd |
+----------------+
|q |heherdafd |
+----------------+
表2
+----------------+
|序号|选项 |
+----------------+
|1 |a |
+----------------+
|2 |b |
+----------------+
|3 |c |
+----------------+
|4 |d |
+----------------+
|5 |e |
+----------------+
|6 |f |
+----------------+
|7 |g |
+----------------+
|8 |h |
+----------------+
|9 |i |
+----------------+
|10 |j |
+----------------+
生成的交叉表为
+--------------------------------------------+
|姓名 |b |c |a |e |f |d |
+--------------------------------------------+
|zhangyun|1 |0 |1 |3 |0 |1 |
+--------------------------------------------+
|tetetete|2 |1 |2 |0 |1 |0 |
+--------------------------------------------+
|zvcvgyun|0 |0 |1 |1 |2 |1 |
+--------------------------------------------+
我想让列名按表2的顺序排序
最后变为下面的样子
+--------------------------------------------+
|姓名 |a |b |c |d |e |f |
+--------------------------------------------+
|zhangyun|1 |0 |1 |3 |0 |1 |
+--------------------------------------------+
|tetetete|2 |1 |2 |0 |1 |0 |
+--------------------------------------------+
|zvcvgyun|0 |0 |1 |1 |2 |1 |
+--------------------------------------------+
------解决方案--------------------
try:
TRANSFORM count(*)
SELECT a.姓名
FROM tba AS a LEFT JOIN tbb AS b ON a.选项=b.选项
GROUP BY a.姓名
PIVOT a.选项 in( 'a ', 'b ', 'c ', 'd ', 'e ', 'f ', 'g ');