假設我們有一個名稱表是這樣的:順序按兩次內的列
PERSON_ID PART_TYPE VALUE
和PERSON_ID
是PERSON
的外鍵引用。
內PART_TYPE
會像值FAMILY
,GIVEN
,PREFIX
,SUFFIX
等值將是實際值,自然。
你會如何寫一個SQL查詢(更不用說休眠)具有由PART_TYPE
此命令,那麼VALUE
爲FAMILY
PART_TYPE
,那麼VALUE
爲GIVEN
PART_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調用中)。我無法在此時更改數據庫架構。
有人可以自由地編輯標題行,如果他們能想到一個更好的方式來描述它。我一直在努力。 – AHungerArtist
您可以舉一個期望的輸出和您現在具有的ORDER BY的例子嗎?也許我讀錯了,但我有點困惑 – dweiss
@dweiss我添加了一個我想要的例子。這更清楚嗎?我也改變了ID,以減少混淆。不過,我在發佈的SQL代碼片段中有ORDER BY子句。 – AHungerArtist