2012-03-08 40 views
5

Tôi đã viết truy vấn trong SQL Server 2008. Truy vấn mất khoảng 4 phút để thực thi.
Tôi cần truy vấn này dưới dạng View. Vì vậy, tôi đã tạo ra một cái nhìn với truy vấn này và khi tôi cố gắng để thực thi kịch bản xem sáng tạo, nó cho thấy các lỗi sau:Lỗi "Hết thời gian chờ", khi thực hiện chế độ xem trong SQL Server 2008

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

Truy vấn là:

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_shT_ledger cả các bảng có khoảng 100 nghìn hàng. Điều gì có thể là lý do có thể và làm thế nào tôi có thể vượt qua điều này?

Cập nhật:

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 

Nó giải quyết vấn đề của tôi. Cảm ơn mọi người vì đã trả lời nhanh chóng của bạn.

Trả lời

4

Hãy thử truy vấn này:

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

tuyệt vời. Nó hoạt động như ma thuật. Phải mất 2 giây để thực hiện. đã không sử dụng 'NOT EXISTS' trước đây. cảm ơn. –

2

truy vấn của bạn chỉ cần quét một lần dbo.T_sh:

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

tuyệt vời. nhưng, vẫn cho thấy cùng một vấn đề. Cảm ơn. –

Các vấn đề liên quan