2014-03-06 117 views
0

我從圓形功能..my查詢家屬表中選擇姓氏%的是:選擇表百分比與其他行

SELECT  F.family_id, F.last_name 
FROM 
(SELECT family_id, father_name, last_name, economic_state, father_state, 
ROW_NUMBER() OVER (PARTITION BY last_name 
ORDER BY last_name, economic_state DESC) RowNo 
FROM FamiliesForCalculationShare 
WHERE economic_state = 'a' OR economic_state = 'b') F INNER JOIN 
(SELECT last_name, Count(1) AS FamCount FROM FamiliesForCalculationShare 
GROUP BY last_name) GR ON F.last_name = GR.last_name AND 
f.rowno <= round(GR.FamCount * 40/100., 0) 

的問題是我有最後一個名字一個家庭..和當百分之40%或30%...圓功能使這個家庭0.4或0.3,並不選擇它.. 但我需要其他家庭的輪功能,並希望選擇這一個家庭..所以我如果(family_lastname_count = 1)需要選擇它,無論百分比是多少。

回答

0

如果我正確理解您的問題,您希望GR.FamCount = 1爲特殊情況,並且始終選擇此行,而不考慮其他40%的計算。如果是這樣,您可以將JOIN條件更改爲使用CASE

AND f.rowno <= 
    CASE WHEN GR.FamCount = 1 
    THEN f.rowno -- Condition, when compared with f.rowno, will always be true 
    ELSE round(GR.FamCount * 40/100., 0) 
    END 

SqlFiddle Here

我也感動於2個派生表濾出在連接條件的,進入一個where子句 - 雖然這並沒有使上內連接的差異,這往往會導致麻煩在outer joins

+0

是的..這是正確的謝謝你非常多斯圖爾特..我試圖讓它沒有案件和家庭的數量成爲巨大的數字,我不知道爲什麼..任何方式謝謝你 – Hamonbatra