试图了解SQL Server 2005查询

时间:2014-07-15 20:07:25

标签: sql sql-server-2005 deprecated

我正在将为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

1 个答案:

答案 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