Sql server 我想使用这个T-SQL语法
我试图构造这个t-sqlSql 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
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的答案。