【发布时间】:2018-09-06 05:25:27
【问题描述】:
首先让我解释一下我现在使用的查询。
作为示例,此查询返回值“357 kg”:
SELECT TOP 1
CONCAT(POCI.Value,' kg')
FROM
ProductionOrder PO
LEFT JOIN Product P ON P.ProductionOrderId = PO.ProductionOrderId
LEFT JOIN ProductionOrderConfiguration POC ON POC.ProductionOrderConfigurationId = PO.ProductionOrderConfigurationId
LEFT JOIN ProductionOrderConfigurationItem POCI ON POCI.ProductionOrderConfigurationId = POC.ProductionOrderConfigurationId
WHERE
P.ProductId = #ProductId# AND POCI.Name = 'C_VIKTA'
问题是有时记录中不存在 POCI.Name (C_VIKTA),因此它的值 (POCI.Value) 不会被返回。 所以我想让下面的逻辑起作用,我知道它可以用 CASE 和 EXISTS 来解决,但我就是不让它起作用..
我想要的结果是如果 POCI.Value 存在返回 CONCAT(POCI.Value,'kg') ELSE 返回'N/A'。有人知道如何解决这个问题吗?
如果您需要了解其他信息以帮助我,请告诉我!
BR,
米克
【问题讨论】:
-
Order by在使用Top时起着重要作用:) -
@LONG 好点子,虽然在这种情况下可能知道它会是相同的重复值并且顺序无关紧要,但我有时会遇到这种情况
-
@AnthonyHancock,是的,也许 op 有一个聚集索引,所以每次他运行 xD 时结果都是一致的
-
Order by 没关系,它只能是 1 条记录,TOP 1 在那里,因为它是在某个时候从另一个查询中复制的,但感谢您的提示 :)
-
@LONG 您能否向我指出一个参考资料,该参考资料解释了在某处具有聚集索引的四个联接表的结果的保证 顺序?我的微弱理解是,如果没有
order by子句,就不能保证顺序不会随着新的索引统计信息、软件补丁、额外的处理器内核……而改变。 (有关在测试中始终如一的故事:The "Bug" Heard 'Round the World。)
标签: sql-server tsql select case exists