SQL:联接表

时间:2019-04-01 14:06:44

标签: sql sql-server-2012

在不久之前从这里得到了人们的大力帮助,我有了这个工作的SQL,它从表的全名中接收名字和姓氏。

if ($tax_rate == "10") {
    $tax_total = $total * $tax_rate; 
}

if ( $tax_rate == "4" ){
    $tax_total = $total * $tax_rate;
}

## -- fai check e calcoli -- ##
$new_total = $total + $tax_total

现在,我正在尝试将此SQL合并到与另一个表的联接中。

select concat(vl.lastname, vf.firstname)
from UserName as t cross apply
 (values (left(t.name, charindex(', ', t.name)), stuff(t.name, 1, 
charindex(', ', t.name) + 1, ''))) vl(lastname, rest) 
cross apply 
(values (left(vl.rest, charindex(' ', vl.rest + ' ')))) vf(firstname)

但是我遇到一个错误,说'='附近的语法不正确。我该如何解决?

2 个答案:

答案 0 :(得分:1)

您需要正确的别名:

. . . (vl.lastname + ',' +  vf.firstName)

这些列不在NewRecruit中。

答案 1 :(得分:0)

第四行有两个相等的符号。 on (a.LName + ',' + a.FName) = t.name = 您需要删除t.name =

子查询必须返回单个行字符串。

select t.name, a.LName, a.FName, a.MI
from NewRecruit a
left join UserName t 
on (a.LName + ',' + a.FName) = (
        select (vl.lastname + vf.firstname)
        from UserName as t cross apply
        (values (left(t.name, charindex(', ', t.name)), stuff(t.name, 1, 
        charindex(', ', t.name) + 1, ''))) vl(lastname, rest) cross apply
        (values (left(vl.rest, charindex(' ', vl.rest + ' ')))) vf(firstname) 
    )

您还将在这里找不到匹配项,因为联接(a.LName + ',' + a.FName)中的第一个元素是连接列并添加逗号,而不是空格。