我从族表中选择last_name百分比表,圆函数..我的查询是:
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并且不选择它。 但我需要其他家庭的圆函数,并希望选择这一个家庭..所以我需要if(family_lastname_count = 1)选择它百分之几。
答案 0 :(得分: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
我还将2个派生表上的过滤器从连接条件移到了where子句中 - 尽管这对内部连接没有影响,但它常常导致outer joins出现问题。