以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  转置表格时,如何对列进行排序  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189741)

--  作者:lur320
--  发布时间:2023/12/22 14:02:00
--  转置表格时,如何对列进行排序
 如附件,源数据有一列是代表列位置的数据,
原本是通过sql addnew逐一添加的行,所以测试项是行倒序
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:12.xls


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

所以通过转置后,发现是列是倒序,问如何按照源数据的ind编号进行排序?
SQL的命令:
Select 检验单号,批号,max(Case When 测试项 = \'大肠埃希菌\' Then 结论 Else NULL End) As ‘大肠埃希菌’,max(Case When 测试项 = \'霉菌酵母菌\' Then 结论 Else NULL End) As ’霉菌酵母菌‘,max(Case When 测试项 = \'需氧菌\' Then 结论 Else NULL End) As ’需氧菌‘,max(Case When 测试项 = \'含量\' Then 结论 Else NULL End) As ’含量‘ From {学生成绩} Group by 检验单号,批号

现在的结果:
正确的是 大肠埃希菌 应当按ind编号,排在最右边。
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2023/12/22 14:06:00
--  
自己调整一下sql的字符

Select 检验单号,批号,max(Case When 测试项 = \'霉菌酵母菌\' Then 结论 Else NULL End) As ’霉菌酵母菌‘,max(Case When 测试项 = \'需氧菌\' Then 结论 Else NULL End) As ’需氧菌‘,max(Case When 测试项 = \'含量\' Then 结论 Else NULL End) As ’含量‘ ,max(Case When 测试项 = \'大肠埃希菌\' Then 结论 Else NULL End) As ‘大肠埃希菌’ From {学生成绩} Group by 检验单号,批号

--  作者:lur320
--  发布时间:2023/12/22 14:08:00
--  
 是指MAX这段的先后顺序吗?
--  作者:lur320
--  发布时间:2023/12/22 14:11:00
--  
 Ok了,
我在拼接sql的时候,按照ind排序就行。谢谢。

combolis = DataTables("QC数据").SQLGetValues("测试项", "批号 in (" & lis & ")","ind") \'得到所选测试项\'    
    ae = combolis.ToArray()\'测试项加工成串
    Dim t, t1 As String
    For Each tes As String In ae
        t = t & "max(Case When 测试项 = \'" & tes & "\' Then 结论 Else null End) as \'" & tes & "\',"
    Next
    t = t.Trim(",")
    t1 = "Se1ect 检验单号," & t & " From {QC数据} where 批号 in (" & lis & ") group by 检验单号"
  
    Dim q As New QueryBuilder
    q.TableName = "QC数据表"
    q.C
    q.SelectString = t1
    q.Build
    MainTable = Tables("QC数据表")