如何解决坚持创建一个正常工作的 0/1 标志终于屈服了
晚上。
我正在尝试创建一个非常基本的 case 语句,它在 mySQL 中用 0 或 1 存储三个场景。 我在下面的参考表链接中找到了三个字段。
本质上,我试图将 StatusCD 为 'I' 和 'O' 的任何 ProductID 存储为 1,只有 'I' 为 1,然后任何只有'O' 结果且没有相应的 'I' 作为0. 此数据显示的是进入仓库 ('I') 然后离开仓库 ('O') 的产品。我还有其他字段正在捕获日期差异,但最终我试图创建一个标志来忽略我们只有带有“O”状态CD 的产品# 的场景,这表明它们到达仓库的记录未正确记录并且会倾斜我们的“仓库时代”存储桶。
非常感谢任何见解!
带字段的参考表:
Date | ProductID | StatusCD
2021-01-01 | U1000 | I
2021-01-10 | U1000 | O
2021-01-10 | U2000 | I
2021-01-15 | U3000 | O
解决方法
假设您想保留每条原始记录,您可以在此处使用分析函数:
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 版本:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。