如附件,源数据有一列是代表列位置的数据,
原本是通过sql addnew逐一添加的行,所以测试项是行倒序
所以通过转置后,发现是列是倒序,问如何按照源数据的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编号,排在最右边。
自己调整一下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 检验单号,批号
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数据表")