2010-08-19 114 views
0

我有一个表中有注释。它有一堆笔记,根据某人在系统中做什么自动完成不同的事情。SQL有条件返回历史记录

当订单assined它使一张纸条,上面写着“订单被分配到‘名’” 当订单被重新分配它使一张纸条,上面写着“秩序被重新分配到‘名’”

当订单分配的初始它抛出的“订单被分配到‘名’”语句转换成笔记。

,任何时候后,订单分配再次,它抛出订单被重新分配。

我的问题是,如果顺序由它分配给自己相同的人投入到它的系统跳过权重新分配的音符,甚至没有说订单被分配到。

现在在我的WHEN条件,我有以下:

WHEN LEFT(n.Text,21) = 'Order was assigned to' 

这基本上只返回在该命令assinged首次名称。因为如果有人给自己指定一个订单,它会跳过这个注释,我需要一个这样做的陈述,但如果没有'订单被分配给',我需要返回第一个订单被重新分配到注释。这些注释在同一个表中也有一个审计插入时间戳字段。订单可以多次重新分配,但如果没有订单被分配给备注,我只需要第一个订单。

我该怎么做?

我知道这是可怕的应用程序设计,但我没有设计它,我不能改变它。我只需要知道如何编写SQL。

谢谢!!!

回答

1

你可以把你当前的查询,并使用相同的代码和一个稍微不同的where子句添加UNION查询。 LEFT()将查找重新分配的注释,并且您将添加NOT EXISTS子句以从第一个查询中排除具有适当注释的订单。

+0

当我添加 哪里NOT EXISTS(LEFT(n.Text,21)= '订单被分配到'),它给了我一个语法错误? 另外,我会怎么说,我想'订单被重新分配'与最短日期只? – user380432 2010-08-20 14:19:16

+0

您需要在存在内部进行查询。即不存在的地方(从myTable中选择1,其中id = n .NoteID和LEFT(a.Text,21)='Order已分配给') - 注意使用来自exists查询之外的别名来加入权限注意(由某个id).. – Fosco 2010-08-20 14:22:31