sql - 如何根据 SQL 中的特定条件恢复备用记录?
问题描述
我希望有人能在这方面帮助我。下面的代码带回了链接到所有零件的订单,包括具有复合材料的零件。因此,如果一个集合由左右部分组成,它将带回以R、L和A结尾的 SKU,这是一个集合,这就是系统所说的组合。
我要做的是编写一个脚本,如果订单在bContainsComposites字段中标记为TRUE,它将带回设置的 SKU 并忽略其他部分,排除Right和Left的记录。
但是,如果订单中的零件/SKU 不是标记为FALSE的复合材料,则恢复该记录。
相关表格和字段如下:
SELECT o.[nOrderID],
oi.[ChannelSKU] AS 'OrderItemSKU',
si.[bContainsComposites]
FROM [Order] o INNER JOIN
[OrderItem] oi
ON o.[pkOrderID] = oi.[fkOrderID]
LEFT JOIN [StockItem] si
ON oi.[fkStockItemId] = si.[pkStockItemID]
选择标准需要基于TRUE或FALSE的[StockItem].bContainsComposites
我目前得到的结果如下表所示。
订单号 | OrderItemSKU | b包含复合材料 |
---|---|---|
285705 | EWS10323A.5 | 真的 |
285705 | EWS10323 | 错误的 |
285706 | EWS10575R | 错误的 |
285706 | EWS10575A | 真的 |
285706 | EWS10575L | 错误的 |
285713 | 631113591N | 错误的 |
我需要记录如下:
订单号 | OrderItemSKU | b包含复合材料 |
---|---|---|
285705 | EWS10323A.5 | 真的 |
285706 | EWS10575A | 真的 |
285713 | 631113591N | 错误的 |
EWS10323A.5 和 EWS10575A 都是复合材料,因此为 TRUE,但 631113591N 不是复合材料,因此为 FALSE。
我需要找到一种基于第二个图解表编写脚本的方法,该表包括该订单的复合零件,但忽略存在复合零件的相同订单的非复合零件。如果订单没有复合部分,我仍然需要它来恢复该记录。
简而言之,我需要写的是这样的东西,但在 SQL 中:
如果 nOrderID 的 COUNT >1 则带回 si.[bContainsComposites] = 1 的记录,否则带回 si.[bContainsComposites] = 0 的记录
解决方案
您似乎想要一个优先级查询。你可以这样做rank()
:
SELECT oc.*
FROM (SELECT o.nOrderID, oi.ChannelSKU AS OrderItemSKU, si.bContainsComposites,
RANK() OVER (PARTITION BY o.nOrderID ORDER BY si.bContainsComposites DESC) as seqnum
FROM [Order] o INNER JOIN
OrderItem oi
ON o.pkOrderID = oi.fkOrderID LEFT JOIN
StockItem si
ON oi.fkStockItemId = si.pkStockItemID
) oc
WHERE seqnum = 1;
推荐阅读
- python - Python-无法通过 TCP/IP 连接转发 HID 数据
- c# - 使用 MEF 对象作为 XmlIncludes 的 XML 反序列化
- python - 如何从我的语料库 TF-IDF 中删除元组?
- javascript - 对数组的第二个参数求和
- python - 使用 pytecplot 脚本在 tecplot 中执行方程
- apache - .htaccess 将 index.html 重定向到 index2.html
- akka - 如何更改使用哪个prometheus抓取metrcs的端口号
- html - 如何强制浏览器自动从服务器检索新页面而不是返回缓存页面
- python - 我在尝试使用 pip 时遇到错误,我无法理解错误消息。有人可以告诉我该怎么做吗?
- ios - Ionic 3 Cordova - Apple 登录有时会在首次登录尝试时抛出 ASAuthorizationErrorUnknown 导致应用程序被拒绝