子查询返回的值超过1,不知道问题在哪里?

问题描述 投票:0回答:1
SELECT  MAX(te.StoreID) AS StoreID, 
        SUM(te.Price * te.Quantity) AS Sales, 
        SUM(te.Cost * te.Quantity) AS Cost, 
        COUNT(DISTINCT t.TransactionNumber) AS Trxn, 
        SUM(te.Quantity) AS Quantity 
FROM    TransactionEntry te 
        INNER JOIN [Transaction] t 
            ON te.TransactionNumber = t.TransactionNumber 
                AND te.StoreID = t.StoreID 
        LEFT JOIN item i 
            ON te.itemID = i.ID 
        LEFT JOIN Department d 
            ON i.DepartmentID = d.ID 
WHERE   d.ID <> 8 AND DATEDIFF(day, t.Time, GETDATE()) = 1 
        AND t.WebInvoiceID <> (select WebInvoiceID from [Transaction] where WebInvoiceID>0) 
GROUP   BY te.StoreID

谁能帮我这个?

sql sql-server
1个回答
1
投票

错误在这一行:

AND t.WebInvoiceID <> (select WebInvoiceID from [Transaction] where WebInvoiceID > 0 )

解决此问题的一种方法是使用NOT IN,因为子查询返回多行。

AND t.WebInvoiceID NOT IN (select WebInvoiceID from [Transaction] where WebInvoiceID>0)

另一种方法是使用我更喜欢的NOT EXISTS

WHERE   d.ID <> 8 AND DATEDIFF(day, t.Time, GETDATE()) = 1 
        AND NOT EXISTS 
        (
            SELECT 1
            FROM [Transaction] tr
            WHERE t.WebInvoiceID = tr.WebInvoiceID
                AND tr.WebInvoiceID > 0
        )

如果没有弄错,根据你原来的逻辑,你没有一个子查询来过滤掉大于零的WebInvoiceID。这可以简化为:

WHERE   d.ID <> 8 AND DATEDIFF(day, t.Time, GETDATE()) = 1 
        AND t.WebInvoiceID > 0
© www.soinside.com 2019 - 2024. All rights reserved.