[英]SQL query - divide two numbers from same column
我正在使用托管的SQL 2008數據庫(因此無法創建表或修改值),並希望將同一列中的兩個數字相除以獲得一個百分比的答案。 將值輸入到同一列( TA_ANS_ANSWER
)中,但輸入的值基於另一個字段,即問題( TA_ANS_QUESTION
)。 例如本月;
第一個問題-“電子學習用戶列表上的承包商總數”-答案輸入'430'。
第二個問題-“在電子學習報告上的承包商總數”-答案輸入'357'我需要得到上述的83%。
隨着答案的增加,我需要為每個月計算一個百分比值。 下面的查詢給出了基礎查詢,該查詢返回前一個MONTH(例如Nov)的名稱,PPM ID和Answer(例如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
您正在尋找的被稱為樞軸。 可以使用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
一種可能的答案是使用公用表表達式(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...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.