【问题标题】:Complex SQL Query - i found no answer :(复杂的 SQL 查询 - 我没有找到答案 :(
【发布时间】:2022-01-05 21:22:12
【问题描述】:

我有一个包含以下列的 MS-SQL 表:

ID, SKU, StockID, StockQTY 

列/行填充如下:

ID SKU StockID StockQTY
1 1111 1 12
2 1111 13 20
3 2222 1 0
4 2222 13 5
5 3333 1 0
6 3333 13 4

现在我需要一个 SQL 查询来显示所有具有 StockQTY = 0 in StockID = 1 AND a StockQTY > 1 in StockID 13 的 SKU(第二列)。不应显示所有其他行(在此示例中,结果中不应显示第 1 行和第 2 行)。

有人知道如何实现这一点吗?

【问题讨论】:

  • 为什么不显示第2行?
  • MySQL(在标签中) MS SQL(在文本中)
  • 请分享您解决问题的尝试
  • 您需要使用 exists 将 SKU 与自加入相关联。不幸的是,问题现已关闭 - 建议您对其进行编辑并明确定义您的预期结果,然后它可能会重新打开。

标签: sql sql-server database


【解决方案1】:

您可以使用相关子查询来测试 StockID 1 中数量为 0 的 skus,然后只保留 StockID 13 中数量大于 1 的任何内容。

SELECT SKU
FROM yourtable yt
WHERE Stockid = 13
   AND NOT EXISTS (SELECT 1 FROM yourtable WHERE StockID = 1 AND yt.SKU = SKU)
HAVING Sum(StockQty) > 1

【讨论】:

  • 我认为这只是两个EXISTS 而不是SUM
  • 你可能是对的。我真的要离开“现在我需要一个 SQL 查询,它显示所有 SKU(第二列)在 StockID = 1 中具有 StockQTY = 0 并且在 StockID 13 中具有 StockQTY > 1”,这表明只需要 sku。
  • 我还假设每个 sku/stockid 组合可能有多个记录。
【解决方案2】:

尝试类似:

SELECT SKU FROM yourTableName WHERE
(StockQTY = 0 AND StockID = 1) OR (StockQTY > 1 AND StockID = 13);

要提取数据,显然它是一个 SELECT 语句,如果您想要所有数据而不仅仅是 SKU 编号,则可以使用 * 代替 SKU。将 yourTableName 与实际的表名交换。 WHERE 子句是您问题的核心。 OR 和 AND 的这种使用可能会造成混淆。我们有 2 个案例正在测试。库存为 0 但 ID 为 1,但我们使用 OR 以便无论是否找到,我们都可以执行 StockQTY 为 1 且 StockID 为 13 的下一部分。您需要 and这两个条件都在自己的情况下,并且您想要 OR 以便这两种情况中的任何一种都会出现。

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习
  • 您的查询不会像 OP 看似需要的那样跳过 ID=1
  • @PM77-1 为什么不呢?如果 stockqty > 0 并且 stockid = 1 它不会在结果集中。
  • 啊,我在他编辑之前就开始了这个,他纠正了他似乎在问的问题。但是我已经因为帮助而获得了仇恨投票,所以我会让其他人完成。
猜你喜欢
  • 2022-01-17
  • 2020-01-14
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多