Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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 我想使用这个T-SQL语法_Sql Server_Tsql - Fatal编程技术网

Sql server 我想使用这个T-SQL语法

Sql server 我想使用这个T-SQL语法,sql-server,tsql,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.id

我试图构造这个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
此外,我需要在
选择中包含一个带有:铁路超高/25的计算列


感谢您的合作

如果我正确理解了您的问题,您可以尝试使用以下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

您应该在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
选择创建一个派生表,因为您在其中求和,这是一种非常有效的方法。

谢谢JNevill,但是在:diar.id1diar=dp.id1My上有错误,我很抱歉。我应该引用派生表
diarDT
,而不是子查询
diar
中的实际表。我已经更新了SQL。请不要使用此答案。您不应该为此编写相关子查询。它们是性能杀手,您永远不应该在生产代码中使用它们。感谢HLGEM,我正在使用JNevill的答案。