在忽略Where子句的同时在SQL查询中选择一些值

时间:2017-06-08 12:05:19

标签: sql sql-server tsql select where

首先,我有这个SQL查询:

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的表中。现在表格已经填满,但是在WHERE语句的主SELECT子句中。由于条件ActualAB = 1,这些值会被抛弃。

是否可以忽略列表中项目的main where子句并从那里返回所有值?这可以在一个查询中完成吗?

非常感谢。

编辑:

这最终会绑定到属性上的网格。所以我们使用一种加载器来评估SELECT语句并接收所有数据,但由于最后的WHERE子句,列表中的值将被第二次过滤。 所以Output应该是一个带有值的表。由主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值。

1 个答案:

答案 0 :(得分: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