以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  INNER JOIN  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=55279)

--  作者:bagabaga
--  发布时间:2014/8/13 16:55:00
--  INNER JOIN
这段代码搞了几天了,搞不定,特来请教
    Dim Multi As String = e.Table.Current("Fk") 
    Dim Values() As String
    Dim sql As String =""
    Values = Multi.split("/")

    If e.Table.Current("Xh") <> ""
     \'   MessageBox.Show(Values(2))
        sql = "Select RcjBm as 人材机编码,Mc as 名称,Dw as 单位,Rcjhl As 含量,Rcjhj as 合计 FROM (SELECT Rcjid,Rcjhl,Rcjhj From {QdxrcjhlMx} where Fk = \'"  & Values(2) & "\') as a INNER JOIN {RcjhzMx} as b ON  b.RcjId = a.RcjId "
    Else
   \'     MessageBox.Show(Values(3))
        sql = "Select RcjBm as 人材机编码,Mc as 名称,Dw as 单位,Rcjhl As 含量,Rcjhj as 合计 FROM (SELECT Rcjid,Rcjhl,Rcjhj From {QdxdercjhlMx} where Fk = \'"  & Values(3) & "\') as a INNER JOIN {RcjhzMx} as b ON  b.RcjId = a.RcjId "
    End If

    If sql <> ""
    Dim b As New GroupTableBuilder("统计表1",sql) 
图片点击可在新窗口打开查看此主题相关图片如下:捕获.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码.rar

    b.Groups.AddDef("人材机编码") 
    b.Groups.AddDef("名称") 
    b.Groups.AddDef("单位") 
    b.Groups.AddDef("含量") 
    b.Totals.AddDef("合计")
    b.VerticalTotal = True
\'    b.Build()
   Dim dr As Table = Tables("清单_Table17")
   dr.DataSource   = b.BuildDataSource()
    For Each cc As Col In dr.Cols
        If cc.Name = "名称"
            cc.Width =80
        Else
            cc.Width =60
        End If
    Next
    End If
End If

1、先从当前表{Qdmx}中读取列Fk字符串
2、判断当前Row列(Xh)是不是为空,不为空,取From {QdxrcjhlMx},Select FK = 字符串(2),
3、为空From {QdxdercjhlMx} ,Select FK = 字符串(3)
4、 INNER JOIN {RcjhzMx} 读取Mc、RjcBM

结果如下图,问题是取出的结果不满足Select FK = 字符串(2)或Select FK = 字符串(3),多了别的内容,请教是什么原因,代码附上


--  作者:有点甜
--  发布时间:2014/8/13 17:15:00
--  

 呃,代码没有错,有可能是你逻辑有问题或者数据有问题。

 

 比如 FK = 8,人材机id有如下 81 83 90 101 106 110 112 114,那么匹配【RcjhzMx】表的时候,就匹配了对应的数据,而你【RcjhzMx】有两个重复的Id 81、83、90等

 

 所以数据是没有错的,但不知道你要取的是什么数据。


--  作者:bagabaga
--  发布时间:2014/8/13 19:29:00
--  
谢谢,{RcjhzMx}是有二个值,如果要对应条件Fk1=1, INNER JOIN {RcjhzMx} as b ON  b.RcjId = a.RcjId 这一句该怎么写 
--  作者:有点甜
--  发布时间:2014/8/13 19:34:00
--  
If e.Table.Current("Xh") <> ""
     \'   MessageBox.Show(Values(2))
        sql = "Select RcjBm as 人材机编码,Mc as 名称,Dw as 单位,Rcjhl As 含量,Rcjhj as 合计 FROM (SELECT Rcjid,Rcjhl,Rcjhj From {QdxrcjhlMx} where Fk = \'"  & Values(2) & "\') as a INNER JOIN {RcjhzMx} as b ON  b.RcjId = a.RcjId where fk1 = \'1\'"
    Else
   \'     MessageBox.Show(Values(3))
        sql = "Select RcjBm as 人材机编码,Mc as 名称,Dw as 单位,Rcjhl As 含量,Rcjhj as 合计 FROM (SELECT Rcjid,Rcjhl,Rcjhj From {QdxdercjhlMx} where Fk = \'"  & Values(3) & "\') as a INNER JOIN {RcjhzMx} as b ON  b.RcjId = a.RcjId  where fk1 = \'1\'"
    End If