Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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 Server查询中尝试联接表时出错_Sql_Sql Server 2012 - Fatal编程技术网

为什么在SQL Server查询中尝试联接表时出错

为什么在SQL Server查询中尝试联接表时出错,sql,sql-server-2012,Sql,Sql Server 2012,我写了下面的查询来收集与卡车司机收入相关的数据。主查询和联接查询都能正常工作。但是,当我合并它们时,我会得到一个错误 Msg 4104,16级,状态1,第37行 无法绑定多部分标识符tn.ctripnumber 与tRev.ctripnumber有关=tn.ctripnumber。我尝试过使用revenue表名和tRev别名 select tn.ctripnumber as "Load Number", tr.cresourcedesc as "Carrier/Driver",

我写了下面的查询来收集与卡车司机收入相关的数据。主查询和联接查询都能正常工作。但是,当我合并它们时,我会得到一个错误

Msg 4104,16级,状态1,第37行 无法绑定多部分标识符tn.ctripnumber

与tRev.ctripnumber有关=tn.ctripnumber。我尝试过使用revenue表名和tRev别名

select 
    tn.ctripnumber as "Load Number",
    tr.cresourcedesc as "Carrier/Driver",
    tr.resourcetype as "Resource Type",
    tn.cfirmorigin as "Pickup Origin",
    tn.corigaddress as "Origin Address",
    tn.corigcity as "Origin City",
    tn.corigstate as "Origin State",
    tn.corigzip as "Origin Zip",
    tn.dorigappt_start as "Scheduled Arrival Date",
    tn.dorigappt_end as "Scheduled Late Arrival Date",
    tn.dtripstartdate as "Actual Arrival Date",
    datediff(minute,tn.dorigappt_start,tn.dtripstartdate) as "Arrival Diff",
    (case when tn.dtripstartdate-tn.dorigappt_start < 0 then 'Early' when tn.dorigappt_start-tn.dtripstartdate = 0 then 'On-time' else 'Late' end) as Arrival_Rank,
    tn.cfirmdestination as "Delivery Destination",
    tn.cdestaddress as "Destination Address",
    tn.cdestcity as "Destination City",
    tn.cdeststate as "Destination State",
    tn.cdestzip as "Destination Zip",
    tn.ddestappt_start as "Scheduled Delivery Date",
    tn.ddestappt_end as "Scheduled Late Delivery Date",
    tn.ddeliverydate as "Actual Delivery Date",
    datediff(minute,tn.ddestappt_start,tn.ddeliverydate) as "Delivery Diff",
    (case when tn.ddeliverydate-tn.ddestappt_start < 0 then 'Early' when tn.ddeliverydate-tn.ddestappt_start = 0 then 'On-time' else 'Late' end) as "Delivery Rank",
    tn.nideadheadmiles as "Deadhead Miles",
    tn.niloadedmiles as "Loaded Miles",
    tn.nideadheadmiles + tn.niloadedmiles as "Total Miles"
from 
    tripnumber tn,tripresources tr
inner join
    (select  
         r.ctripnumber, sum(Revenue_Subtotal) as "Revenue" 
     from 
         (select 
              r.ctripnumber, r.cmethod, sum(r.curevenue) as Revenue_Subtotal
          from 
              revenuedtl r 
          where 
              r.cmethod in (select distinct r.cmethod from revenuedtl r)
          group by 
              r.ctripnumber, r.cmethod) r
     --where r.cmethod like 'BROK%'
     group by 
         r.ctripnumber) tRev on tRev.ctripnumber = tn.ctripnumber
where 
    tn.ctripnumber = tr.ctripnumber
    --and tn.ctripnumber = '324412'
    and tr.resourcetype in ('D','M')
    and tn.dtripstartdate >= '2018-12-01 00:00:00.000'
    and tn.dtripstartdate < '2019-01-01 00:00:00.000'
这是您的from条款:

简单规则:在FROM子句中不要使用逗号。始终使用正确、明确、标准的联接语法

因此,请使用适当的联接重写此代码:

你的错误就会消失

查询失败的技术原因是,的作用域规则不同于交叉联接。实际上,您可以用交叉连接替换逗号来解决问题。但正确的解决方案是正确地表示联接。

这是from子句:

简单规则:在FROM子句中不要使用逗号。始终使用正确、明确、标准的联接语法

因此,请使用适当的联接重写此代码:

你的错误就会消失


查询失败的技术原因是,的作用域规则不同于交叉联接。实际上,您可以用交叉连接替换逗号来解决问题。但是正确的解决方案是正确地表达连接。

这是一条不适合在评论部分的评论。尽量不要把旧的学校联谊会和现代联谊会混为一谈。这使得读取和调试更加困难

例如,更改此项:

from tripnumber tn,tripresources tr
where tn.ctripnumber = tr.ctripnumber
为此:

from tripnumber tn
join tripresources tr on tn.ctripnumber = tr.ctripnumber

这是一条不适合评论部分的评论。尽量不要把旧的学校联谊会和现代联谊会混为一谈。这使得读取和调试更加困难

例如,更改此项:

from tripnumber tn,tripresources tr
where tn.ctripnumber = tr.ctripnumber
为此:

from tripnumber tn
join tripresources tr on tn.ctripnumber = tr.ctripnumber

不要把旧式联姻和现代联姻混为一谈。不要把旧式联姻和现代联姻混为一谈。