2013-05-14 106 views
1

在我的SQL Server的代碼,我有這樣的select語句如何將select語句與新的動態值合併爲列?

select distinct 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name 
from NewHire a 
join Position b on a.Position_ID = b.Position_ID 
join WorkPeriod c on a.hireID = c.HireID 
where a.Archived = 0 and c.InquiryID is not null 
order by a.HireID DESC, a.HireLastName, a.HireFirstName 

而且我想一個新列添加到它。然而,這個列不是表格中的一列,它只是用來存儲我從現有列中計算得出的float

我得到的數字是這樣計算的: @acc是上述select語句中的a.HireID

CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc AND (HireResponse = 0 OR HireResponse = 1)) as FLOAT)/
CAST((select COUNT(*) from Hire_Response WHERE HireID = @acc) as FLOAT) 

我該怎麼做? 謝謝。

回答

2

這應該這樣做

select distinct 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name, 
    CAST((select COUNT(*) from Hire_Response WHERE HireID = a.HireID AND 
     (HireResponse = 0 OR HireResponse = 1)) as FLOAT)/
    CAST((select case when COUNT(*) = 0 then 1 else COUNT(*) end from Hire_Response WHERE HireID = a.HireID) as FLOAT) as mySpecialColumn 
from NewHire a 
join Position b on a.Position_ID = b.Position_ID 
join WorkPeriod c on a.hireID = c.HireID 
where a.Archived = 0 and c.InquiryID is not null 
order by a.HireID DESC, a.HireLastName, a.HireFirstName 
+0

如果是零的鴻溝,它需要默認爲0。 – omega 2013-05-14 16:31:12

+0

@omega我按你的意見我的答案更新。它應該避開零差錯。 – Becuzz 2013-05-14 16:52:58

0

您需要爲該列添加別名。 這是假設你的計算是正確的參考你需要的列。

select 
    (Calculated Column expression) as CalculatedColumn, 
    * 
from 
    TableName 


select distinct 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name, 
    (CAST((select COUNT(*) from Hire_Response WHERE HireID = a.HireIDAND (HireResponse = 0 OR HireResponse = 1)) as FLOAT)/
    CAST((select COUNT(*) from Hire_Response WHERE HireID = a.HireID) as FLOAT)) as CalculatedColumn 
from NewHire a 
join Position b on a.Position_ID = b.Position_ID 
join WorkPeriod c on a.hireID = c.HireID 
where a.Archived = 0 and c.InquiryID is not null 
order by a.HireID DESC, a.HireLastName, a.HireFirstName 
1

你只需要計算添加到您的select語句,因爲我已經把下面,我也alaised與列名的計算爲您提供:

select distinct 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name, 
    CAST((select COUNT(*) from Hire_Response WHERE HireID = a.HierID AND 
     (HireResponse = 0 OR HireResponse = 1)) as FLOAT)/
    CAST((select COUNT(*) from Hire_Response WHERE HireID = a.HierID) as FLOAT) AS [Calculation] 
from NewHire a 
join Position b on a.Position_ID = b.Position_ID 
join WorkPeriod c on a.hireID = c.HireID 
where a.Archived = 0 and c.InquiryID is not null 
order by a.HireID DESC, a.HireLastName, a.HireFirstName 
+0

如果被零除,它需要默認爲0。 – omega 2013-05-14 16:32:38

0

艱難地試圖找出沒有數據結構的例子的目標,但在這裏。我添加了一個新的JOIN,和GROUP BY子句:

select distinct 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name, 
    sum(case when hr.HireResponse in (0, 1) then 1.00 else 0.00 end) as Numerator, 
    count(hr.*) as Denominator, 
    sum(case when hr.HireResponse in (0, 1) then 1.00 else 0.00 end)/count(hr.*) as Fraction 

from 
    NewHire a join 
    Position b on a.Position_ID = b.Position_ID join 
    WorkPeriod c on a.hireID = c.HireID inner join 
    Hire_Response hr on a.HireID = hr.HireID 

where 
    a.Archived = 0 
    and c.InquiryID is not null 

group by 
    a.HireLastName, 
    a.HireFirstName, 
    a.HireID, 
    a.Position_ID, 
    a.BarNumber, 
    a.Archived, 
    a.DateArchived, 
    b.Position_Name 

order by 
    a.HireID DESC, a.HireLastName, a.HireFirstName 
相關問題