首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法创建正常工作的0/1标志。最后终于让步了

无法创建正常工作的0/1标志。最后终于让步了
EN

Stack Overflow用户
提问于 2021-04-19 10:09:16
回答 1查看 27关注 0票数 4

晚上好。

我正在尝试创建一个非常基本的case语句,它将mySQL中带有0或1的三个场景组合在一起。我在下面的参考表链接中找到了三个字段。

本质上,我尝试存储任何StatusCD为“I”且“O”为1的ProductID,只有“I”为1,然后是任何只有“O”结果且没有相应“I”为0的StatusCD。此数据显示的是产品进入仓库(“I”),然后离开仓库(“O”)。我还有其他捕获日期差异的字段,但最终我试图创建一个标记来忽略以下情况:我们只有产品#的statusCD带有'O‘,这将表明它们到达仓库的日志没有正确记录,并会使我们的“仓库中的年龄”桶倾斜。

任何见解都是非常感谢的!

带字段的引用表:

代码语言:javascript
复制
Date       | ProductID | StatusCD
2021-01-01 | U1000     | I
2021-01-10 | U1000     | O
2021-01-10 | U2000     | I
2021-01-15 | U3000     | O
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 10:23:13

假设您想保留每条原始记录,您可以在这里使用分析函数:

代码语言:javascript
复制
SELECT Date, ProductID, StatusCD,
       CASE WHEN SUM(StatusCD <> 'O') OVER (PARTITION BY ProductID) = 0
            THEN 0 ELSE 1 END As Label
FROM yourTable
ORDER BY Date;

Demo

对于早于8+的MySQL版本:

代码语言:javascript
复制
SELECT t1.Date, t1.ProductID, t1.StatusCD,
       CASE WHEN t2.OpenCount = 0 THEN 0 ELSE 1 END AS Label
FROM yourTable t1
INNER JOIN
(
    SELECT ProductID, SUM(StatusCD <> 'O') AS OpenCount
    FROM yourTable
    GROUP BY ProductID
) t2
    ON t2.ProductID = t1.ProductID
ORDER BY
    t1.Date;

Demo

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67155162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档