Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 给定VB.net代码,将多个查询合并为1_Sql_Vb.net - Fatal编程技术网

Sql 给定VB.net代码,将多个查询合并为1

Sql 给定VB.net代码,将多个查询合并为1,sql,vb.net,Sql,Vb.net,给定下面的代码,该代码基于日期范围返回第一个记录集(rs),其中包含一些值,然后在第二个记录集(rs2)中使用这些值来汇总成本。代码下面有进一步的解释: strSQL = "SELECT job, suffix, isnull(qty_scrapped,0),isnull(qty_released,0), isnull(price,0),co_num FROM vwDashboardsQuality " strSQL &= " WHERE trans_date >=

给定下面的代码,该代码基于日期范围返回第一个记录集(rs),其中包含一些值,然后在第二个记录集(rs2)中使用这些值来汇总成本。代码下面有进一步的解释:

strSQL = "SELECT job, suffix, isnull(qty_scrapped,0),isnull(qty_released,0), isnull(price,0),co_num FROM vwDashboardsQuality "
strSQL &= "        WHERE trans_date >= '" & dtpStartDate.Value & "' AND trans_date <= '" & dtpEndDate.Value & "' "

rs = conn.Execute(strSQL)

While Not rs.EOF
    strCONUM = Trim("" & rs("co_num").Value)

    strSelectString = "SELECT ISNULL(a_cost,0) FROM jobmatl WHERE job='" & rs("job").Value & "' AND suffix = " & Format(rs("suffix").Value)

     rs2 = conn.Execute(strSelectString)
     While Not rs2.EOF
         dblSumActualMaterialCost = dblSumActualMaterialCost + CDbl(rs2(0).Value)
         rs2.MoveNext()
     End While
     rs2.Close()
     rs2 = Nothing
     rs.MoveNext()
End While
rs.Close()
rs = Nothing
strSQL=“从vwDashboardsQuality中选择作业、后缀、isnull(报废数量,0)、isnull(放行数量,0)、isnull(价格,0)、co_num”

strSQL&=“WHERE trans_date>='”&dtpstardate.Value&“'和trans_date看起来您只需要对两个查询执行
内部联接即可获得一个结果集

看看这是否有效。如果有效,您可以消除第二个查询和第二个内部循环

 strSQL = "SELECT d.job, d.suffix, isnull(d.qty_scrapped,0), isnull(d.qty_released,0)," _
 & " isnull(d.price,0), d.co_num, ISNULL(m.a_cost,0)" _
 & " FROM vwDashboardsQuality d" _
 & " INNER JOIN jobmatl m" _
 & " ON d.job = m.job" _
 & " AND d.suffix = m.suffix" _
 & " WHERE trans_date >= '" & dtpStartDate.Value & "'" _
 & " AND trans_date <= '" & dtpEndDate.Value & "'"
strSQL=“选择d.job,d.suffix,isnull(d.qty\u报废,0),isnull(d.qty\u放行,0),”_
&isnull(d.price,0),d.co\u num,isnull(m.a\u cost,0)_
&“来自VWD仪表盘”_
&“内部联接jobmatl m”_
&“在d.job=m.job上”_
&“和d.suffix=m.suffix”_
&“其中trans_date>=”&dtpStartDate.Value&“_

&“从您的代码中,我看到您最后只是对满足where子句设置的条件的
jobmatl.a_cost
的所有值运行一个
SUM
。那么为什么不在同一个查询上执行所有操作呢?您将在结果集上节省所有不必要的迭代,您正在失去以前的CPU时间和资源

另外,在第一个查询中没有使用所有其他值,为什么要首先获取它们?我从下面的查询中删除了它们

SELECT  SUM(j.a_cost)
FROM    vwDashboardsQuality vDQ
        INNER JOIN jobmatl j
            ON vDQ.job = j.job
               AND vDQ.suffix = j.suffix
WHERE   vDQ.trans_date >= @startdate
        AND vDQ.trans_date <= @enddate;
选择总和(j.a_成本)
来自vwDashboardsQuality vDQ
内连接jobmatl j
关于vDQ.job=j.job
和vDQ.suffix=j.suffix
其中vDQ.trans_date>=@startdate

和vDQ.trans_日期实际上它们正在被使用,我只是没有包含该代码。我的猜测是因为OP生成了一个,而您的解决方案将其剥离得太远了。好的,但这并不意味着答案是错误的,对于他的目的是获得一个查询,甚至在不迭代代码的情况下获得所需的结果是正确的。不过,谢谢你,谢谢!工作得很有魅力。。。谈论大脑冻结(我不会告诉任何人。)很高兴我能提供帮助。此外,您可以在Where子句中使用“2015-09-29”和“2015-09-30”之间的语句
trans_data
,使用
BETWEEN
子句时要小心,这是旧代码吗?那是阿多吗?。。
SELECT  SUM(j.a_cost)
FROM    vwDashboardsQuality vDQ
        INNER JOIN jobmatl j
            ON vDQ.job = j.job
               AND vDQ.suffix = j.suffix
WHERE   vDQ.trans_date >= @startdate
        AND vDQ.trans_date <= @enddate;