2017-06-08 121 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