mysql纵表转横表

mysql纵表转横表,第1张

分两次进行不同的查询就可以实现了

先查出组员信息,比如组员数量、文章总数、评论总数等

再查出组长信息

两个查询一合并就可以了

SQL角本如下:

select a用户名 组长, b组员数量, b文章总数, b评论总数
  from (select 编号, 用户名 from table_name where 角色 = '组长') a, -- 找组长信息
       (select 组长, 
               count(1) 组员数量,
               sum(文章) 文章总数,
               sum(评论) 评论总数
          from table_name
         where 组长 is not null
         group by 组长) b   -- 找组员信息
 where a编号 = b组长

如下图

A13,公式

=LOOKUP(,0/FREQUENCY(ROW(A1),SUBTOTAL(3,OFFSET($B$2,,,ROW($1:$4),11))),$A$2:$A$5)

B13,数组公式,三键输入

=INDEX($B$1:$L$1,SMALL(IF(OFFSET($B$1,MATCH(A13,$A$1:$A$5,)-1,,,11)>0,COLUMN(OFFSET($B$1,MATCH(A13,$A$1:$A$5,)-1,,,11))),COUNTIF(A$12:A13,A13))-1)

C13,公式

=INDEX($A$1:$M$5,MATCH($A13,$A$1:$A$5,),MATCH($B13,$A$1:$L$1,))

行列自行转换

代码如下:

Sub Macro1()
For i = 1 To 3
   Range("A" & i  13 - 12)Resize(12)Copy
   Range("F" & i + 1)PasteSpecial Paste:=xlPasteAll, Operation:=xlPasteSpecialOperationNone, SkipBlanks:=False, Transpose:=True
Next
End Sub

你所谓的行列转换应该是指纵表转横表,横表转纵表
给你个例子
纵表转横表:
使用DECODE语句,可以很方便的将纵表转为横表,例子如下:
原表查询结果:
ID MAJOR CURRENT_CREDITS
------ ---------------- ---------------
10000 Computer Science 98
10000 History 88
10001 Computer Science 75
10000 Economics 66
我们要把各科成绩从同一列转到不同的列中去。
SQL>select id,
sum(decode(major,’Computer Science’,current_credits,0)) cs,
sum(decode(major,’History’,current_credits,0)) his,
sum(decode(major,’Economics’,current_credits,0)) eco
from students
group by id
ID CS HIS ECO
------ ----------- ------------- -----
10000 98 88 66
10001 75
横表转纵表:
使用 UNION 即可实现将横表转为纵表,以上面的表为例:
转换前:
ID CS HIS ECO
------ ----------- ------------- -----
10000 98 88 66
SQL>select id, ’Computer Science’ major,cs current_credits
from students
union
select id, ’History’ major,his current_credits
from students
union
select id, ’Economics’ major,eco current_credits
from students
ID MAJOR CURRENT_CREDITS
------ ---------------- ---------------
10000 Computer Science 98
10000 History 88
10000 Economics 66

你这个是将纵表转换为横表,例如如下数据:
'wangming', 'shuxue', 100
'wangming', 'yuwen', 90
'wangming', 'yingyu', 140
可以使用如下语句处理:
select av_name,av_score shuxue,bv_score yuwen,cv_score yingyu from temp_1 a,temp_1 b,temp_1 c
where av_name=bv_name
and av_name=cv_name
and av_name='wangming'
and av_course='shuxue'
and bv_course='yuwen'
and cv_course='yingyu';


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13373863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存