0

我需要有关查询的帮助,或包含该问题的答案的链接:

我有两张桌子:STOCK_ITEMSSTOCK_LOC_INFO

STOCK_ITEMS有很多领域,但感兴趣的两个是STOCKCODESTOCK_CLASSIFICATION

STOCK_LOC_INFO包含针对每个库存位置(11 个位置)的记录STOCKCODE

STOCK_ITEMS

 item1,class 1
 item2,class 2
 item3,class 1

STOCK_LOC_INFO

item1,location1,qty1
item1,location2,qty2
item1,location3,qty3

等,为每个股票代码重复 11 行。

现在...我想在 11 个位置中的 5 个中查找某个类别的库存代码数量(数量大于 0)。我试过这个:

select COUNT(SOH.STOCKCODE)
from dbo.STOCK_ITEMS SOH
Inner join STOCK_LOC_INFO SLI
on SOH.STOCKCODE = SLI.STOCKCODE
where SLI.QTY > 0 and SLI.LOCATION in(1,2,3,9,11)

并得到 9790 的结果 - 这太高了(预计约为 900),因为每次所需的零件编号出现在 Stock Loc 表中且超过 0 时,它都会计数......但我只想要每个股票代码的“是”或“否”,不是每个数量。

我怀疑它需要一个 COUNTIF 或类似的。我只是迷路了!

非常感谢任何帮助。

4

4 回答 4

1

您只想要满足您标准的不同股票代码的数量吗?如果是这样的话:

SELECT COUNT(DISTINCT SOH.STOCKCODE)
FROM STOCK_ITEMS SOH
INNER JOIN STOCK_LOC_INFO SLI
ON SOH.STOCKCODE = SLI.STOCKCODE
WHERE SLI.QTY > 0 AND SLI.LOCATION IN(1,2,3,9,11)

您还可以在加入之前限制 SLI 表:

SELECT COUNT(SOH.STOCKCODE)
FROM STOCK_ITEMS SOH
INNER JOIN (SELECT DISTINCT STOCKCODE 
            FROM STOCK_LOC_INFO
            WHERE QTY > 0 AND LOCATION IN(1,2,3,9,11)
            )SLI
ON SOH.STOCKCODE = SLI.STOCKCODE
于 2013-06-04T21:37:03.693 回答
1

如果我理解正确,这就是你想要的:

SELECT COUNT(*)
FROM (  SELECT SOH.STOCKCODE, COUNT(*) AS N
        FROM dbo.STOCK_ITEMS SOH
        INNER JOIN STOCK_LOC_INFO SLI
            ON SOH.STOCKCODE = SLI.STOCKCODE
        WHERE SLI.QTY > 0 AND SLI.LOCATION in(1,2,3,9,11)
        GROUP BY SOH.STOCKCODE
        HAVING COUNT(*) = 5) A
于 2013-06-04T21:39:25.663 回答
1

尝试:

select count(1)
from dbo.STOCK_ITEMS SOH
inner join (select distinct STOCKCODE, LOCATION
             from STOCK_LOC_INFO
             where QTY > 0 and LOCATION in(1,2,3,9,11)) SLI
on SOH.STOCKCODE = SLI.STOCKCODE

它计算每个选定位置中 QTY>0 的唯一 STOCKCODE 总数。

于 2013-06-04T21:43:24.153 回答
1

使用 Oracle,您可以这样做:

select COUNT(SOH.STOCKCODE)
  from dbo.STOCK_ITEMS SOH
 WHERE SOH.STOCKCODE IN (
              SELECT SLI.STOCKCODE
                FROM STOCK_LOC_INFO SLI
               where SLI.QTY > 0 
                 and SLI.LOCATION in(1,2,3,9,11)
                       )
于 2013-06-04T21:46:16.560 回答