簡體   English   中英

SQL查詢-將同一列中的兩個數字相除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM