我正在将为SQL Server 2005编写的一些查询转换为可在SQL Server 2012中运行的语言和语法。此查询中的某些语言已弃用和/或我不熟悉它。在下面的查询中,我知道COMPUTE已被ROLLUP取代。
我遇到的第一件事我不熟悉的是为什么字段c.employee_name有1,之后呢? d.client_name的问题相同。我注意到我可以将1更改为其他数字,但我无法弄清楚拥有它的目的。我还注意到,如果我删除了,1查询不起作用。
第二个问题是使用from子句三个表是引用和别名。这对许多人来说可能是基本的,但我以前从未见过这个,并且从未在单个from子句中引用过多个表。我总是使用连接。这是正常的语法吗?
select
a.latest_period ,
b.offc,
convert(char(4), c.employee_name, 1),
d.client_code,
convert(Char(25), d.client_name, 1),
sum(tobill_amt)
from
CDT_disb a, hbm_matter b, hbm_persnl c, HBM_client d
where
a.matter_uno = b.matter_uno
and c.empl_uno = b.bill_empl_uno
and b.client_uno = d.client_uno
and a.latest_period between '200701' AND '200901'
and a.wip_status = 'W' and a.hardsoft = 'S' and a.tobill_amt <> 0
group by
a.latest_period, b.offc, c.employee_name, d.client_code, d.client_name
compute sum(sum(tobill_amt))
以下是结果集的示例
latest_period offc (No Column Name) client_code (No Column Name) (No Column Name)
------------- ---- ---- ----------- ------------------------- -------------------------
200704 ATL Brav TAY003 Smith, James 14310.25
200704 MV Arms CLA002 Smith, Jane 2000
答案 0 :(得分:1)
每个MSDN文档CONVERT
函数的语法是
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
因此,在您的情况convert(char(4),c.employee_name,1)
中,1
正在使用样式格式。
在FROM
子句中引用3个表,如下所示;是一种隐式连接语法。
from CDT_disb a,hbm_matter b, hbm_persnl c, HBM_client d
您可以更好地将其更改为显式连接语法,例如
from CDT_disb a
join hbm_matter b on a.col = b.col
join hbm_persnl c on a.col = c.col
join HBM_client d on a.col = d.col