从表中选择其他行的百分比

时间:2014-03-06 04:22:02

标签: sql-server-2008-r2

我从族表中选择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)选择它百分之几。

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

SqlFiddle Here

我还将2个派生表上的过滤器从连接条件移到了where子句中 - 尽管这对内部连接没有影响,但它常常导致outer joins出现问题。