2017-06-08 64 views
0

首先我有這樣的SQL查詢選擇一些值:在SQL查詢中而忽略了Where子句

DECLARE @list TABLE 
(
    [DocID] int, 
    [OrderQuantity] decimal(18,3) 
) 

INSERT INTO @list (DocID, OrderQuantity) 
    (SELECT 
     tblCusDocsPos.DocID, tblCusDocsPos.OrderQuantity, 
    FROM 
     tblCusDocsPos 
    LEFT OUTER JOIN 
     tblCusDocsPos ON tblCusDocsPos.DocID = tblCusDocsPos.DocID 
    WHERE 
     (tblCusDocs.ActualAB = 0) 
    GROUP BY 
     tblCusDocsPos.DocID , tblCusDocsPos.OrderQuantity) 

SELECT 
    [tblCusDocs].[DocID], [tblCusDocs].[DocTypeID], 
    [tblCusDocs].[ContractNum], 
    [tblCusDocs].[OrderQuantity], list.OrderQuantity 
FROM 
    tblCusDocs 
LEFT OUTER JOIN 
    [tblCusDocsPos] ON [tblCusDocsPos].DocID = [tblCusDocs].DocID 
LEFT OUTER JOIN 
    @list ON list.DocID = [tblCusDocs].DocID 
WHERE 
    [tblCusDocs].ActualAB = 1 

這裏的問題是:我值插入我的表稱爲list與條件ActualAB = 0。現在表格正在填補,但在SELECT聲明的主要WHERE條款中。由於條件ActualAB = 1,這些值將被拋出。

是否可以忽略列表中的項目的主要where子句並返回所有值?這可以在一個查詢中完成嗎?

非常感謝。

編輯:

這是越來越綁定到網格上在端部的性質。因此,我們使用一種加載器來評估SELECT語句並接收所有數據,但由於WHERE子句末尾列表中的值再次被過濾。 因此,輸出應該是一個包含值的表格。由主WHERE子句過濾的三列和由上述WHERE子句過濾的一個(list.OrderQuantity)。

EDIT2:

好吧我試圖用數據樣本表的種類更清楚地解釋它。

我從與這樣的內容的表濾波:

DocID | AB | OrderQuantity | ContractNum

1 1 2 111

2 0 5 111

3 1 0 222

4 1 10 333

5 1 3 444

在這種情況下,由於主要的WHERE子句,我將得到AB = 1的所有值。 假設我正在過濾ContractNum。在我的情況下,我想也有四個結果,但是當我有相同的ContractNums時,我寧願選擇AB = 1的OrderQuantity值。

+2

只是刪除where子句,如果你不想要它? – ADyson

+0

由於其他值位於我的tblCusDocs表中,因此WHERE子句必須存在。所以我需要在一個這樣的語句中過濾來自AB = 0的一個表中的值和來自另一個具有AB = 1的值。 – Canox

+1

也許如果你給我們一些樣本數據和預期結果,以明確你想要什麼 – GuidoG

回答

0

這是黑暗中拍攝的結果,在ActualAB = 1或結果在列表中的情況下,您希望獲得結果。

DECLARE @list TABLE 
(
    [DocID] int, 
    [OrderQuantity] decimal(18,3) 
) 

INSERT INTO @list (DocID, OrderQuantity) 
    (SELECT 
     tblCusDocsPos.DocID, tblCusDocsPos.OrderQuantity, 
    FROM 
     tblCusDocsPos 
    LEFT OUTER JOIN 
     tblCusDocsPos ON tblCusDocsPos.DocID = tblCusDocsPos.DocID 
    WHERE 
     (tblCusDocs.ActualAB = 0) 
    GROUP BY 
     tblCusDocsPos.DocID , tblCusDocsPos.OrderQuantity) 

SELECT 
    [tblCusDocs].[DocID], [tblCusDocs].[DocTypeID], 
    [tblCusDocs].[ContractNum], 
    [tblCusDocs].[OrderQuantity], list.OrderQuantity 
FROM 
    tblCusDocs 
LEFT OUTER JOIN 
    [tblCusDocsPos] ON [tblCusDocsPos].DocID = [tblCusDocs].DocID 
LEFT OUTER JOIN 
    @list ON list.DocID = [tblCusDocs].DocID 
WHERE 
    [tblCusDocs].ActualAB = 1 OR list.DocID IS NOT NULL