2012-03-08 12 views
5

He escrito una consulta en SQL Server 2008. La consulta tarda aproximadamente 4 minutos en ejecutarse.
Necesito esta consulta como View. Por lo tanto, he creado una vista con esta consulta, y cuando trato de ejecutar el script de creación de vista, se muestra el siguiente error:Error "Tiempo de espera caducado" al ejecutar la vista en SQL Server 2008

Timeout Expired.
The timeout period elapsed prior to completion of the operation or the server is not responding.

La consulta es:

SELECT t.jrnno, 
     (SELECT SUM(t1.amount) 
      FROM dbo.T_sh AS t1 
     WHERE (t1.b_or_s = '1') AND (t1.jrnno = t.jrnno)) AS buy, 
     (SELECT SUM(t2.amount) 
      FROM dbo.T_sh AS t2 
     WHERE (t2.b_or_s = '2') AND (t2.jrnno = t.jrnno)) AS sale, 
     SUM(t.amount) AS Total, 
     SUM(t.h_crg) AS Howla, 
     SUM(t.l_crg) AS Laga, 
     SUM(t.taxamt) AS Tax, 
     SUM(t.commsn) AS Commission 
    FROM dbo.T_sh AS t 
WHERE (t.tran_type = 'S') 
    AND (t.jrnno NOT IN (SELECT DISTINCT jrnno 
          FROM dbo.T_ledger)) 
GROUP BY t.jrnno 

T_sh y T_ledger tanto las tablas tienen alrededor de 100K filas. ¿Cuál podría ser la razón posible y cómo puedo superar esto?

Actualización:

select 
    t.jrnno, 
    SUM(CASE WHEN t.b_or_s = 1 THEN t.amount ELSE NULL END) buy, 
    SUM(CASE WHEN t.b_or_s = 2 THEN t.amount ELSE NULL END) sale, 
    SUM(t.amount) AS Total, 
    SUM(t.h_crg) AS Howla, 
    SUM(t.l_crg) AS Laga, 
    SUM(t.taxamt) AS Tax, 
    SUM(t.commsn) AS Commission 
FROM 
    dbo.t_sh t 
WHERE 
    t.tran_type = 'S' 
    AND NOT EXISTS(SELECT 1 FROM dbo.T_ledger x where x.jrnno = t.jrnno) 
group by 
    t.jrnno 

Se resolvió mi problema. Gracias a todos por su rápida respuesta.

Respuesta

4

Intentar esta consulta:

select 
t.jrno, 
SUM(CASE WHEN t1.b_or_s = 1 THEN t.amount ELSE NULL END) buy, 
SUM(CASE WHEN t1.b_or_s = 2 THEN t.amount ELSE NULL END) sale, 
SUM(t.amount) AS Total, 
SUM(t.h_crg) AS Howla, 
SUM(t.l_crg) AS Laga, 
SUM(t.taxamt) AS Tax, 
SUM(t.commsn) AS Commission 
FROM dbo.t_sh t 
WHERE t.tran_type = 'S' 
AND NOT EXISTS(SELECT 1 FROM dbo.T_ledger x x.jrno = t.jrno) 
+0

genial. Funciona como magia. Tardó 2 segundos en ejecutarse. no usó 'NO EXISTE' antes. Gracias. –

2

Su consulta sólo tiene que escanear dbo.T_sh vez:

SELECT t.jrnno, 
     SUM(CASE WHEN t.b_or_s = 1 THEN t.amount ELSE NULL END) AS buy, 
     SUM(CASE WHEN t.b_or_s = 2 THEN t.amount ELSE NULL END) AS sale, 
     SUM(t.amount) AS Total, 
     SUM(t.h_crg) AS Howla, 
     SUM(t.l_crg) AS Laga, 
     SUM(t.taxamt) AS Tax, 
     SUM(t.commsn) AS Commission 
    FROM dbo.T_sh AS t 
    WHERE t.tran_type = 'S' 
    AND t.jrnno NOT IN (SELECT DISTINCT 
           tl.jrnno 
          FROM dbo.T_ledger tl) 
GROUP BY t.jrnno 
+0

grande. pero, aún muestra el mismo problema. Gracias. –

Cuestiones relacionadas