SQL(和JPA)在非规范化表上对参数进行排序

时间:2015-03-25 11:39:14

标签: sql jpa denormalization

我继承了一个遗留的报告工具,并且有一个非规范化的表格,用于存储销售团队的ID,以及描述其详细信息的字段。

表格就像这样(这里有简化的字段数):

表Salers: salerId,fieldId,value

我们有像

这样的数据

(1,1,Doe), (1,2,约翰), (2,1,史密斯), (2,2,罗伯特), (3,1,白), (3,2,艾伦)

我需要获取按姓氏和名字排序的搜索者列表。

我不是SQL专家,我无法弄清楚如何以通用方式获取它(因为该表包含的不仅仅是名字和姓氏类型的字段)。

此外,我在数据库的顶部使用JPA,并有一个描述这些字段的类。我仍然不知道如何用JPA编写这样的查询。

class SaleInformation {
    private int salerID;
    private int fieldID;
    private String value;
}

有什么想法吗?

提前致谢

吉勒

1 个答案:

答案 0 :(得分:0)

我可以在SQL代码中帮助您:

select salerID, [2] LastName, [1] FirstName
from Salers s
pivot 
(
  max(value) for fieldID in ([1], [2])
) Result
order by [2], [1]

如果您不能使用PIVOT运算符,则为:

select ISNULL(FirstName.salerID, LastName.salerID) salerID
  , LastName.value LastName
  , FirstName.value FirstName
from (
  select *
  from Salers s
  where s.fieldID = 1) FirstName
full outer join (
  select *
  from Salers s
  where s.fieldID = 2) LastName on FirstName.salerID = LastName.salerID
order by LastName.value, FirstName.value