2012-12-18 71 views
0

我建立一個應用程序一個複雜的SQL查詢suggesion

我有一個學生表在我的SQL數據庫 這具有以下結構

(
Student_ID int, 
FullName varchar(255), 
FirstName varchar(255), 
LastName varchar(255), 
FatherName varchar(255), 
Father_FirstName varchar(255), 
Father_LastName varchar(255), 
Date_of_Birth datetime, 
Gender varchar(10), 
Date_of_Registration datetime, 
Regestration_Status varchar(10), 
Degree_Status varchar(10), 
Qualification varchar(15), 
Campus varchar(15), 
Batch int, 
Degree varchar(10) 
) 

聚集在這個表中的數據是從4名不同的城市KARACHI,ISLAMABAD,PESHAWAR,KARACHI

從Peshawar收集的學生數據沒有設置Gender屬性,因此在整個表中這些來自peshawar的學生的性別列不包含任何價值。

我的主管要求我通過關聯規則填充表格的這個補丁,那大多數學生的名字通過表格非常相似,如果有一個特定的名字,如「USMAN」,並且有100個名字像USMAN在整個表格中,無論他們來自哪個城市,如果60個USMAN行有性別MALE,那麼在peshawar是該城市的補丁中的任何行,並且學生的名字是Usman,我應該將其性別設置爲男性

我希望我已經明確了我的問題,我試圖通過一些SQL查詢做這項工作,如果任何人可以幫助我,我會非常感謝ful

+0

對不起,我還是不明白。你能給出一個樣本結果嗎?兩個學生可以有同一個父親,還是一個以上的學位?如果是這樣,你應該規範化表格。 – Kermit

+0

如果我理解的很好,您希望爲每個名字獲得最具代表性的性別,並從這些數據中更新具有相同名字的人的性別,並用此性別更新性別?你在哪個數據庫引擎上工作? –

+0

是先生正是這正是我正在嘗試使用SQL SERVER 2012 – user1676346

回答

0

這是一個很好的把戲設置性別c olumn。首先以名字總結開始:

select FirstName, count(*), sum(case when gender = 'M' then 1 else 0 end) as NumMales, 
     avg(case when gender = 'M' then 1.0 else 0.0 end) as MalePercent, 
     (case when avg(case when gender = 'M' then 1.0 else 0.0 end) > 0.5 then 'M' 
      else 'F' 
     end) as ImputedGender 
from Students s 
where gender is not null 
group by FirstName 

接下來,您需要查看結果並設置臨界值。一名男性或女性學生具有某個特定名稱並不能說服該名稱賦予性別。因此,假設您至少需要五個示例和80%的性別比例:

select FirstName, count(*), sum(case when gender = 'M' then 1 else 0 end) as NumMales, 
     avg(case when gender = 'M' then 1.0 else 0.0 end) as MalePercent, 
     (case when avg(case when gender = 'M' then 1.0 else 0.0 end) > 0.5 then 'M' 
      else 'F' 
     end) as ImputedGender 
from Students s 
where gender is not null 
group by FirstName 
having count(*) >= 5 and 
     avg(case when gender = 'M' then 1.0 else 0.0 end) not between 0.2 and 0.8 

下一步是將歸算的性別分配給行。這可能取決於各種SQL。這是類似的:

update Students 
    set gender = ImputedGender 
    from (<the above query>) ig 
    where ig.Firstname = Students.FirstName and 
      Students.city <> 'Peshawar' and 
      Students.gender is null 
+0

親愛的戈登非常感謝你,但我是SQL新手這些是你寫的非常複雜的查詢我試圖在我的腦海中運行這個瞭解這個 – user1676346