Subconsulta o Case ???

22/03/2005 - 00:11 por Ducky | Informe spam
Hola,

Soy novato y quisiera su opinion sobre los siguientes dos SELECT,

Ambos me regresan los mismos resultados (acumulados por dia,mes,año)

Me pregunto cual de las dos se ejecuta mas rapido, pensando en que a futuro
la tabla de movimientos tenga muchos...

Aprecio mucho su tiempo y atención,


SELECT Codigos.cla_cod, Codigos.des_cod,
(SELECT ISNULL(SUM(Movimientos.car_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND fec_mov >= CONVERT(varchar(8), GETDATE(), 112)
AND fec_mov < CONVERT(varchar(8), GETDATE() + 1, 112)) AS
DIAC,
(SELECT ISNULL(SUM(Movimientos.abo_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND fec_mov >= CONVERT(varchar(8), GETDATE(), 112)
AND fec_mov < CONVERT(varchar(8), GETDATE() + 1, 112)) AS
DIAA,
(SELECT ISNULL(SUM(Movimientos.car_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND Movimientos.fec_mov >= CONVERT(varchar(6), GETDATE(),
112) + '01'
AND Movimientos.fec_mov < CONVERT(varchar(6), DATEADD(mm, 1,
GETDATE()), 112)) AS MESC,
(SELECT ISNULL(SUM(Movimientos.abo_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND Movimientos.fec_mov >= CONVERT(varchar(6), GETDATE(),
112) + '01'
AND Movimientos.fec_mov < CONVERT(varchar(6), DATEADD(mm, 1,
GETDATE()), 112)) AS MESA,
ISNULL(SUM(Movimientos.car_mov), 0) AS AAAc,
ISNULL(SUM(Movimientos.abo_mov), 0) AS AAAa
FROM Codigos RIGHT OUTER JOIN Movimientos ON Movimientos.ccc_mov =
Codigos.cla_cod
WHERE (Movimientos.fec_mov >= CONVERT(varchar(4), GETDATE(), 112) + '0101')
AND (Movimientos.fec_mov < CONVERT(varchar(4), DATEADD(yyyy, 1,
GETDATE()), 112))
GROUP BY Codigos.cla_cod, Codigos.des_cod


**************************************************************************
SELECT Codigos.cla_cod,Codigos.des_cod,
ISNULL(SUM(case when Movimientos.fec_mov >= CONVERT(varchar(8), GETDATE(),
112) AND Movimientos.fec_mov < dateadd(day, 1, CONVERT(varchar(8),
GETDATE(), 112)) then Movimientos.car_mov end),0) AS DiaC,
ISNULL(SUM(case when Movimientos.fec_mov >= CONVERT(varchar(8), GETDATE(),
112) AND Movimientos.fec_mov < dateadd(day, 1, CONVERT(varchar(8),
GETDATE(), 112)) then Movimientos.abo_mov end),0) AS DiaA,
ISNULL(SUM(case when fec_mov >= CONVERT(varchar(6), GETDATE(), 112) + '01'
AND fec_mov < dateadd(month, 1, CONVERT(varchar(6), GETDATE(), 112) + '01')
then Movimientos.car_mov end),0) AS MesC,
ISNULL(SUM(case when fec_mov >= CONVERT(varchar(6), GETDATE(), 112) + '01'
AND fec_mov < dateadd(month, 1, CONVERT(varchar(6), GETDATE(), 112) + '01')
then Movimientos.abo_mov end),0) AS MesA,
ISNULL(SUM(Movimientos.car_mov),0) AS AaaC,
ISNULL(SUM(Movimientos.abo_mov),0) AS AaaA
FROM Codigos RIGHT OUTER JOIN Movimientos
ON Movimientos.ccc_mov = Codigos.cla_cod
WHERE fec_mov >= ltrim(year(getdate())) + '0101' AND fec_mov <
ltrim(year(getdate()) + 1) + '0101'
GROUP BY Codigos.cla_cod, Codigos.des_cod
 

Leer las respuestas

#1 Miguel Egea
22/03/2005 - 00:21 | Informe spam
Normalmente mejor sin subconsultas, pero puedes usar set statistics io on,
y ver el número de lecturas. También puedes ver el plan de ejecución con
mostrar plan de ejecución o con comandos y estudiar cual es el más simple.

Saludos
Miguel Egea
"Ducky" escribió en el mensaje
news:
Hola,

Soy novato y quisiera su opinion sobre los siguientes dos SELECT,

Ambos me regresan los mismos resultados (acumulados por dia,mes,año)

Me pregunto cual de las dos se ejecuta mas rapido, pensando en que a
futuro
la tabla de movimientos tenga muchos...

Aprecio mucho su tiempo y atención,


SELECT Codigos.cla_cod, Codigos.des_cod,
(SELECT ISNULL(SUM(Movimientos.car_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND fec_mov >= CONVERT(varchar(8), GETDATE(), 112)
AND fec_mov < CONVERT(varchar(8), GETDATE() + 1, 112)) AS
DIAC,
(SELECT ISNULL(SUM(Movimientos.abo_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND fec_mov >= CONVERT(varchar(8), GETDATE(), 112)
AND fec_mov < CONVERT(varchar(8), GETDATE() + 1, 112)) AS
DIAA,
(SELECT ISNULL(SUM(Movimientos.car_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND Movimientos.fec_mov >= CONVERT(varchar(6), GETDATE(),
112) + '01'
AND Movimientos.fec_mov < CONVERT(varchar(6), DATEADD(mm,
1, GETDATE()), 112)) AS MESC,
(SELECT ISNULL(SUM(Movimientos.abo_mov), 0)
FROM Movimientos
WHERE Movimientos.ccc_mov = Codigos.cla_cod
AND Movimientos.fec_mov >= CONVERT(varchar(6), GETDATE(),
112) + '01'
AND Movimientos.fec_mov < CONVERT(varchar(6), DATEADD(mm,
1, GETDATE()), 112)) AS MESA,
ISNULL(SUM(Movimientos.car_mov), 0) AS AAAc,
ISNULL(SUM(Movimientos.abo_mov), 0) AS AAAa
FROM Codigos RIGHT OUTER JOIN Movimientos ON Movimientos.ccc_mov =
Codigos.cla_cod
WHERE (Movimientos.fec_mov >= CONVERT(varchar(4), GETDATE(), 112) +
'0101')
AND (Movimientos.fec_mov < CONVERT(varchar(4), DATEADD(yyyy, 1,
GETDATE()), 112))
GROUP BY Codigos.cla_cod, Codigos.des_cod


**************************************************************************
SELECT Codigos.cla_cod,Codigos.des_cod,
ISNULL(SUM(case when Movimientos.fec_mov >= CONVERT(varchar(8), GETDATE(),
112) AND Movimientos.fec_mov < dateadd(day, 1, CONVERT(varchar(8),
GETDATE(), 112)) then Movimientos.car_mov end),0) AS DiaC,
ISNULL(SUM(case when Movimientos.fec_mov >= CONVERT(varchar(8), GETDATE(),
112) AND Movimientos.fec_mov < dateadd(day, 1, CONVERT(varchar(8),
GETDATE(), 112)) then Movimientos.abo_mov end),0) AS DiaA,
ISNULL(SUM(case when fec_mov >= CONVERT(varchar(6), GETDATE(), 112) + '01'
AND fec_mov < dateadd(month, 1, CONVERT(varchar(6), GETDATE(), 112) +
'01') then Movimientos.car_mov end),0) AS MesC,
ISNULL(SUM(case when fec_mov >= CONVERT(varchar(6), GETDATE(), 112) + '01'
AND fec_mov < dateadd(month, 1, CONVERT(varchar(6), GETDATE(), 112) +
'01') then Movimientos.abo_mov end),0) AS MesA,
ISNULL(SUM(Movimientos.car_mov),0) AS AaaC,
ISNULL(SUM(Movimientos.abo_mov),0) AS AaaA
FROM Codigos RIGHT OUTER JOIN Movimientos
ON Movimientos.ccc_mov = Codigos.cla_cod
WHERE fec_mov >= ltrim(year(getdate())) + '0101' AND fec_mov <
ltrim(year(getdate()) + 1) + '0101'
GROUP BY Codigos.cla_cod, Codigos.des_cod




Preguntas similares