我想使用这种T-SQL语法

时间:2014-11-12 17:42:01

标签: sql-server tsql

我试着构建这个t-sql

SELECT
   dp.cod1,
   (select codruta from terce where terce.codcli = dp.codcli) as ruta,
   (select rutasec from terce where terce.codcli = dp.codcli) as rutasec,
   dp.bols,
   (select sum(cantidad) from diar where diar.id1diar = dp.id1) as cant,
   dp.nors
FROM 
   diariop as dp
ORDER BY 
   cod1, ruta, rutasec

此外,我需要在SELECT中包含一个计算列:cant / 25

感谢您的合作

2 个答案:

答案 0 :(得分:2)

您应该在FROM子句中正确加入表,而不是在SELECT子句中使用子查询。这将有助于您的数据库正确地优化您的查询,并且可以更有效地从联接表中选择多个列,就像您使用terce表一样:

Select 
 dp.cod1,
 terce.codruta as ruta,
 terce.rutasec as rutasec,
 dp.bols,
 diarDT.sumOfCantidad as cant,
 diarDT.sumOfCantidad/25 as cant_divided_by_25,
 dp.nors
 FROM 
    diariop as dp
    LEFT OUTER JOIN terce ON
        terce.codcli = dp.codcli
    LEFT OUTER JOIN (select id1diar, sum(cantidad) as sumOfCantidad from diar GROUP BY id1diar ) as diarDT
        diarDT.id1diar=dp.id1
 ORDER BY cod1, ruta, rutasec

我仍在为你的diar选择创建一个派生表,因为你在那里进行求和,这是一种很好的有效方式。

答案 1 :(得分:-1)

如果我已正确理解您的问题,您可以尝试使用以下SQL

Select 
 dp.cod1,
 (select codruta from terce where terce.codcli = dp.codcli) as ruta,
 (select rutasec from terce where terce.codcli = dp.codcli) as rutasec,
 dp.bols,
 (select sum(cantidad) from diar where diar.id1diar=dp.id1) as cant,
 (select sum(cantidad) from diar where diar.id1diar=dp.id1)/25 as cantcalculated,
 dp.nors
 FROM diariop as dp
 ORDER BY cod1, ruta, rutasec