2013-11-30 1 views
1

У меня есть две таблицы (таблица last_name) и (таблица семейств), которые связаны друг с другом по имени ... поэтому каждая фамилия в таблице last_name имеет много семейств в таблице семейств. . Теперь я хочу, чтобы выбрать 50 процентов семей, для каждых фамилий .. как я могу это сделать, пожалуйста ...получить данные по процентам для каждого значения в таблице

select top 50 percent 
    family_id , 
    family_name , 
    last_name 
from 
    families 
where 
    last_name = 'here i want all of last name' 

после этого я хочу, чтобы подсчитать все семьи, которые я выбранные из семей, для каждого last_name .. спасибо

+0

Почему происходит '' C# тег на вопрос? Это похоже на sql только вопрос. – MarcinJuraszek

+0

правый .., но если требуется C# ... – Hamonbatra

+0

, возможно, для этого требуется петля foreach .. поэтому я поставил C# с sql – Hamonbatra

ответ

0

Нет необходимости в C# или петле, решение ниже, вероятно, не идеально, но должно дать вам шаг в правильном направлении:

SELECT F.family_id, F.family_name, F.last_name FROM 

(SELECT family_id, family_name, last_name, 
ROW_NUMBER() OVER (PARTITION BY last_name ORDER BY last_name) RowNo 
FROM families) F 

INNER JOIN (

SELECT last_name, Count(1) as FamCount 
FROM families 
GROUP BY last_name) GR 

ON F.last_name = GR.last_name 
AND F.RowNo <= GR.FamCount/2 

Идея здесь: Первый внутренний выбор дает каждой семье с той же фамилией номер строки. второй выбор получает общее количество семей для одной и той же фамилии. И соединение получает половину отбора для каждой семьи.

Демоверсия: http://sqlfiddle.com/#!3/2900e4/3 В таблице 4 семьи с фамилией Джонсон и 6 с Паттерсоном. И запрос возвращает 2 и 3 семьи с уважением.

Имея этот результат можно выполнить дополнительные операции (например, группу, LastName, чтобы получить отсчет от выбора)

+0

спасибо очень много Yuriy galanter .. это прекрасно и очень полезно – Hamonbatra

+0

привет Юрию снова. спасибо за ваш код ... только одна вещь .. при выборе процента .. я хочу, если выбрана фамилия была 3.5 .. я хочу это 4, и если выбранная фамилия была меньше 5 в 3.5 .. я хочу это 3 .. как я могу это сделать .. пожалуйста – Hamonbatra

+0

Не могли бы вы объяснить более подробно? Например. Если есть семь семей, вы хотите, чтобы 50% составляли 4? –

Смежные вопросы