首先,我有这个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值。
答案 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