以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何用SQL语句实现垂直表和水平表的转换灵活操作  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=143701)

--  作者:lgz518
--  发布时间:2019/12/2 11:49:00
--  如何用SQL语句实现垂直表和水平表的转换灵活操作
如何用SQL语句实现垂直表和水平表的转换灵活操作

1.实例下面还为很代码,不在这里体现;这里SQL把“课程”写死,不利扩展,比如用户再新一个课程,就是改一次。

  
2.对上面问题SQL语句实现垂直表和水平表的转换是否有灵活,也就不管用户,增加多少课程,都可以一条语句,不用再修改。那要如何实现 
  代码要怎么改,谢谢





--  作者:lgz518
--  发布时间:2019/12/2 11:50:00
--  

垂直表和水平表的转换

在一些场合,可能需要对表的结构进行横竖转换。

示例一

假定表A的结构如下:

图片点击可在新窗口打开查看

希望将其转换为表B,结构为:

图片点击可在新窗口打开查看


--  作者:lgz518
--  发布时间:2019/12/2 11:54:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2019/12/2 12:01:00
--  
没有其他办法,只能写死。或者根据课程的动态合成需要的sql
--  作者:lgz518
--  发布时间:2019/12/2 14:29:00
--  
那如何实现根据课程的动态合成需要的sql,谢谢
--  作者:有点蓝
--  发布时间:2019/12/2 14:45:00
--  
类似

dim sql as string = "Select 姓名,"
dim arr() as string = {"语文","数学"}
for each s as string in arr
    sql = sql & "Sum(iif(课程 = \'" & s & "\',分数,0)) As " & s & ","
next
sql = sql.trim(",") & " From {学生成绩} Group by 姓名"