Sql server “按父子关系排序”;“项目代码”-&引用;ItemReplacementCode";在一张桌子里

Sql server “按父子关系排序”;“项目代码”-&引用;ItemReplacementCode";在一张桌子里,sql-server,hibernate,select,group-by,sql-order-by,Sql Server,Hibernate,Select,Group By,Sql Order By,假设我们有产品的记录,其中列为ItemCode和itemplacementcode。 因为我们谈论的是一张桌子: ItemCode不是主键 itemplacementcode不是外键 它们只是varchars列 我希望在select result中看到的是: id, productname, itemcode, replacementCode 99, dell ###, a1234X, null 10034, dell ###, 1233bX, a123

假设我们有产品的记录,其中列为
ItemCode
itemplacementcode
。 因为我们谈论的是一张桌子:

  • ItemCode
    不是主键

  • itemplacementcode
    不是外键

它们只是varchars列

我希望在select result中看到的是:

id,     productname, itemcode, replacementCode
99,     dell ###,   a1234X,    null
10034,  dell ###,   1233bX,    a1234X
10024,  dell ###,   1232X,    1233bX
95,     dell ###,   999ws,    null
96,     sony ###,   327b,     null
等等。请注意,
itemCode
replacementCode
不便于按字母顺序排序

您能否指导我如何选择产品,以便按照替换代码对其进行分组和订购(请注意,不要按标量分组)。 当然,我们谈论的是一种由一条sql语句检索的“亲属”的构建图,其中包含“孤儿”产品,这些产品没有替代品。 请不要犹豫要求澄清。 请参考类似的讨论


只有在不影响性能的情况下,我才愿意添加其他hibernate关系。

我不是100%确定您在寻找什么,但这里有一些选项

仅按替换代码订购

SELECT id,     productname, itemcode, replacementCode
FROM ItemTable
ORDER BY replacementCode
我看到替换代码中有空值。如果您想按项目订购,但如果有替换代码,请使用替换代码,请尝试此操作

SELECT ISNULL(replacementCode ,itemcode) AS NewItemCode ,id, productname
FROM ItemTable
ORDER BY ISNULL(replacementCode ,itemcode)

@理查德维维安:谢谢,我说“(请注意,不要按标量分组)”可能还没有引起足够的注意。我在结果中需要的是按替换代码订购的选定产品。我将在一分钟内尝试更新问题帖子。您使用的是SQL Server还是Hibernate?我的数据库引擎是MsSQL,它是Hibernate上使用xml映射实现的数据层。请注意,itemCode和replacementCode对于排序来说不是字母友好的。第二条sql语句我必须仔细阅读才能理解。谢谢。你能发布一个你希望看到的数据结果的样本吗?这可能有助于理解你在寻找什么。为什么不按字母顺序友好?我不知道如何正确回答这里的问题。原谅你的短处。这里是我的尝试:“你能发布一个你期望看到的数据结果的样本吗?”-请查看更新后的帖子问题。“为什么不按字母顺序友好?”替换代码将不会遵循明显的规则。假设没有像“T5替换T4”这样的规则,但它可能是“T5替换W150”。我想我的第二个选择会给你你想要的。听起来您想按ItemCode排序,但如果某个项目已被替换,则按该替换代码排序,而不是原始项目代码。在第2条语句中,运算符为NULL,只需将未提供的替换代码替换为ItemCode即可。语句并没有构建父子顺序。也许这个问题的标题会让人产生误解,所以人们一直在回答关于字母顺序的问题。