0
SELECT 
    CONVERT(INT, 0) AS SeqNo,
    id AS ID,
    [pi no] AS InvoiceNo,
    [pi date] AS InvoiceDate,
    PM.partyname AS VENDORNAME,
    docno AS DOCNO,
    (
        CASE 
            WHEN [docdate] = '0001-01-01' THEN NULL
            WHEN [docdate] = '1900-01-01' THEN NULL
            ELSE [docdate]
            END
        ) AS DOCDATE,
    AD.againstinvoiceno AS AgainstNo,
    (
        CASE 
            WHEN AD.againstinvoicedate = '0001-01-01' THEN NULL
            WHEN AD.againstinvoicedate = '1900-01-01' THEN NULL
            ELSE AD.againstinvoicedate
            END
        ) AS AgainstDate,
    Isnull(
        Stuff((
                SELECT 
                    CHAR(10) 
                    + ('[ ' 
                        + BR.againstinvoiceno 
                        + ' - ' 
                        + CONVERT(VARCHAR(100), BR.againstinvoicedate, 103) 
                        + ' ]')
                FROM (
                        SELECT 
                            pimasterid,
                            againstinvoiceno,
                            againstinvoicedate
                        FROM purchaseinvoicedetails
                        WHERE againstinvoiceid > 0
                        GROUP BY 
                            pimasterid,
                            againstinvoiceno,
                            againstinvoicedate
                        ) BR
                WHERE PIM.id = BR.pimasterid
                FOR XML path('')
        ), 1, 1, ''), 
    '') AS AgainstInfo,
    PIM.[net pivalue] AS NetAmount
FROM purchaseinvoice PIM
LEFT JOIN (
              SELECT 
                PIND.pimasterid,
                againstinvoiceno,
                againstinvoicedate
              FROM purchaseinvoicedetails PIND
              INNER JOIN (
                        SELECT 
                            pimasterid,
                            Min(id) AS MINID
                        FROM purchaseinvoicedetails
                        WHERE againstinvoiceid > 0
                        GROUP BY pimasterid
                ) MINRD ON MINRD.minid = PIND.id
            ) AD ON AD.pimasterid = PIM.id
INNER JOIN (
            SELECT 
                partycode,
                partyname
            FROM partymaster
        ) PM ON PM.partycode = PIM.[vendor id]
WHERE PIM.[status] = 0
    AND PIM.loccode = 1
ORDER BY id DESC

我需要优化上面提到的查询。有时需要超过一分钟才能显示结果。我们检查了没有索引的表,因此我们根据 Tuning advisor 的建议添加了索引,之后它显示高扫描计数和排序成本。您能帮忙解决这个问题吗?

4

0 回答 0