2013-12-18 80 views
0

我正在使用託管的SQL 2008數據庫(因此無法創建表格或修改值),並希望從同一列中劃分兩個數字以獲得單個百分比答案。這些值輸入到同一列(TA_ANS_ANSWER),但輸入的值基於另一個字段,即問題(TA_ANS_QUESTION)。 例如這個月SQL查詢 - 將同一列中的兩個數字相除

第一個問題 - 「電子學習用戶列表中的總承包商數量」 - 輸入回答'430'。

第二個問題 - 「電子學習引導報告的總承包商數量」 - 輸入的答案'357' 我需要獲得以上值83%。

當需要填充答案時,我需要計算每個月的單個百分比值。 下面的查詢給出了返回前一個MONTH(例如11月),PPM ID和答案(例如430)名稱的基本查詢。我可以修改它以返回兩行,每個問題的回答爲1,但我只想要一行與月份,PPM ID和百分比計算。

道歉,如果答案是凝視着我的臉,但任何幫助將不勝感激。

SELECT CONVERT(varchar(3), TA_DUE_DATE-28, 100) AS MONTH, 
TA_TASK_ID AS PPM, 
F_TASK_ANS.TA_ANS_ANSWER AS ANSWER 

FROM F_TASK_ANS 
INNER JOIN F_TASKS 
ON F_TASK_ANS.TA_ANS_FKEY_TA_SEQ = F_TASKS.TA_SEQ 

WHERE TA_ANS_ANSWER <> '' 
AND F_TASKS.TA_FKEY_CTR_SEQ = 126 
AND F_TASK_ANS.TA_ANS_QUESTION LIKE '%Total No. Contractors on e-learning User List%' 
AND (TA_HIST_STATUS IS NULL OR TA_HIST_STATUS = 'COMPLETE') 
AND TA_TASK_ID LIKE '%6025' 
AND TA_DUE_DATE >= GETDATE()-360 
AND TA_DUE_DATE <= GETDATE()+7 

ORDER BY PPM 
+0

請發佈樣本數據和期望的輸出。 –

回答

0

你在找什麼叫做關鍵點。這可以使用PIVOT關鍵字完成,也可以使用GROUP BY和MIN(CASE WHEN ... END)手動完成。查看標有「pivot」的其他答案以獲取更多示例。

SELECT CONVERT(varchar(3), TA_DUE_DATE-28, 100) AS MONTH, 
TA_TASK_ID AS PPM, 
MIN(CASE WHEN F_TASK_ANS.TA_ANS_QUESTION LIKE '%Total No. Contractors on e-learning inducted report%' THEN F_TASK_ANS.TA_ANS_ANSWER END) +0.0 
/MIN(CASE WHEN F_TASK_ANS.TA_ANS_QUESTION LIKE '%Total No. Contractors on e-learning User List%' THEN F_TASK_ANS.TA_ANS_ANSWER END) 
    AS PERCENTAGE 

FROM F_TASK_ANS 
INNER JOIN F_TASKS 
ON F_TASK_ANS.TA_ANS_FKEY_TA_SEQ = F_TASKS.TA_SEQ 

WHERE TA_ANS_ANSWER <> '' 
AND F_TASKS.TA_FKEY_CTR_SEQ = 126 
AND (F_TASK_ANS.TA_ANS_QUESTION LIKE '%Total No. Contractors on e-learning User List%' OR 
    (F_TASK_ANS.TA_ANS_QUESTION LIKE '%Total No. Contractors on e-learning inducted report%') 
AND (TA_HIST_STATUS IS NULL OR TA_HIST_STATUS = 'COMPLETE') 
AND TA_TASK_ID LIKE '%6025' 
AND TA_DUE_DATE >= GETDATE()-360 
AND TA_DUE_DATE <= GETDATE()+7 
GROUP BY CONVERT(varchar(3), TA_DUE_DATE-28, 100),TA_TASK_ID 
+0

非常感謝Anon對你的幫助。不幸的是我得到以下錯誤; System.Data.SqlClientError:將mvarchar轉換爲數據類型數字的算術溢出錯誤。我是否需要將2個答案轉換爲小數? –

+0

更新 - 只是使用投射,我是正確的,你的解決方案完美運作。 CAST(MIN(當F_TASK_ANS.TA_ANS_QUESTION LIKE'%電子學習引入的電子學習合同總數報告%'THEN F_TASK_ANS.TA_ANS_ANSWER END時的CASE數值)作爲NUMERIC(5,2)) /CAST(MIN(CASE WHEN CASE WHEN F_TASK_ANS.TA_ANS_QUESTION LIKE '%電子學習用戶列表總數%承包商'THEN F_TASK_ANS.TA_ANS_ANSWER END)AS NUMERIC(5,2))* 100 非常感謝您的幫助。 :) –

0

一個可能的答案是使用公用表表達式(CTE)。類似這樣的:

;with TotalOnELearningList (Month, TaskID, NumberOnList) as 
(
    select 
     convert(varchar(3), ta_due_date - 28, 100) as month, 
      ta_task_id, 
      f_task_ans.ta_ans_answer 
    from ... 
), 
TotalOnInductedReport (Month, TaskID, NumberInductedReport) as 
(
    ... 
), 
select 
    case NumberInductedReport when 0 then 0 else NumberOnList/NumberInductedReport * 100 end as 'Percent', 
    ... 
from TotalOnELearningList 
inner join TotalOnIndutedReport 
    on... 
+0

嗨保羅。你的知識遠遠超過我的恐懼,我不知道我將如何應用CTE(不是我熟悉的)。更糟糕的是,當你在寫'''的答案中,我不清楚應該輸入什麼內容。作爲新手道歉,但我很感謝你的時間。 –

相關問題