2012-05-02 59 views
2

假設我們有一個名稱表是這樣的:順序按兩次內的列

PERSON_ID PART_TYPE VALUE 

PERSON_IDPERSON的外鍵引用。

PART_TYPE會像值FAMILYGIVENPREFIXSUFFIX等值將是實際值,自然。

你會如何寫一個SQL查詢(更不用說休眠)具有由PART_TYPE此命令,那麼VALUEFAMILYPART_TYPE,那麼VALUEGIVENPART_TYPE

來考慮一下,你有這三個人:

Given3 Family10 
Given5 Family10 
Given7 Family10 

有了這個SQL:

SELECT this_.person_id, name1_.part_type, name1_.value 
FROM person this_ 
LEFT OUTER JOIN name name1_ 
ON this_.person_id  =name1_.person_id 
ORDER BY (
    CASE 
    WHEN name1_.PART_TYPE = 'FAMILY' 
    THEN 0 
    WHEN name1_.PART_TYPE = 'GIVEN' 
    THEN 1 
    END), 
    name1_.VALUE, 

我得到:

ID2 FAM Family10 
    ID1 FAM Family10 
    ID3 FAM Family10 
    ID4 GIV Given3 
    ID5 GIV Given5 
    ID6 GIV Given7 

我想:

ID1 FAM Family10 
     ID2 FAM Family10 
     ID3 FAM Family10 
     ID4 GIV Given3 
     ID5 GIV Given5 
     ID6 GIV Given7 

因此,當前狀態下這些Family10行的順序是不確定的 - 它可以是ID1,ID2和ID3的任意組合。我希望他們根據給定值進行排序。我真的不知道如何做到這一點,即使有多個選擇語句。

我想這樣做的原因是因爲我想要獲取這些人員ID,並且我可以在我的一端執行一些過濾以獲取不同的人員ID並對其執行一些分頁邏輯,然後實際加載人員(從而切割在很多SQL調用中)。我無法在此時更改數據庫架構。

+0

有人可以自由地編輯標題行,如果他們能想到一個更好的方式來描述它。我一直在努力。 – AHungerArtist

+0

您可以舉一個期望的輸出和您現在具有的ORDER BY的例子嗎?也許我讀錯了,但我有點困惑 – dweiss

+0

@dweiss我添加了一個我想要的例子。這更清楚嗎?我也改變了ID,以減少混淆。不過,我在發佈的SQL代碼片段中有ORDER BY子句。 – AHungerArtist

回答

3

這與你所要求的有點不同,但也許有幫助 - 它給予每個人的家庭和名稱。

SELECT this_.person_id, family.value as family, given.value as given 
FROM person this_ 
LEFT OUTER JOIN name family 
    ON this_.person_id = family.person_id 
    and family.PART_TYPE = 'FAMILY' 
LEFT OUTER JOIN name given_ 
    ON this_.person_id = given.person_id 
    and given.PART_TYPE = 'GIVEN' 
ORDER BY family.value, given.value 
+0

看起來正確。哇,你真棒!我會接受這一點。你知道如何在Hibernate中做到這一點嗎? – AHungerArtist

+0

對不起,我對Hibernate一點也不熟悉。我相信其他人可以幫助你。 – Chad

+1

沒問題。你已經做了很多。再次感謝。 – AHungerArtist