2016-08-30 170 views
-1

我需要爲報表創建查詢並捕獲填充了多少百分比的數據並將其顯示爲計算列。SQL Server 2012 - 創建顯示查詢百分比的計算列

到目前爲止,我還用寫了一個查詢連接來獲得我所需要的數據:

查詢:

SELECT 
    SU.ID, 
    MAX(SU.[GenderID]), 
    MAX(SU.[TelephoneNumber]), 
    MAX(SU.[MobileNumber]), 
    MAX(SU.[AddressID]), 
    MAX(SU.[WebSite]), 
    MAX(SU.[Narrative]), 
    MAX(SU.[IndividualTitleID]), 
    MAX(SU.[DateOfBirth]), 


    MAX(SUED.SystemUserID) AS [SUEDID], 
    MAX(SUE.ID) AS [SUEID], 
    MAX(SUQ.ID) AS [SUQID], 
    MAX(SUPB.ID) AS [SUPB], 
    MAX(SUPQ.ID) AS [SUPQID], 
    MAX(SUPI1.ID) AS [Skill], 
    MAX(SUPI2.ID) AS [Achievement], 
    MAX(SUPI3.ID) AS [Interest] 
FROM 
    [Employed].[SystemUser] SU 
LEFT OUTER JOIN 
    [Profile].[SystemUserEducation] SUED ON SU.ID = SUED.SystemUserID 
LEFT OUTER JOIN 
    [Profile].[SystemUserQualification] SUQ ON SUED.ID = SUQ.SystemUserEducationID 
LEFT OUTER JOIN 
    [Profile].[SystemUserEmployment] SUE ON SU.ID = SUE.SystemUserID 
LEFT OUTER JOIN 
    [Profile].[SystemUserProfessionalBody] SUPB ON SU.ID = SUPB.SystemUserID 
LEFT OUTER JOIN 
    [Profile].[SystemUserProfessionalQualification] SUPQ ON SU.ID = SUPQ.SystemUserID 
LEFT OUTER JOIN 
    [Profile].[SystemUserProfileItem] SUPI1 ON SU.ID = SUPI1.SystemUserID AND SUPI1.SystemUserProfileItemTypeID = 1 -- Skills 
LEFT OUTER JOIN 
    [Profile].[SystemUserProfileItem] SUPI2 ON SU.ID = SUPI2.SystemUserID AND SUPI2.SystemUserProfileItemTypeID = 2 -- Achievement 
LEFT OUTER JOIN 
    [Profile].[SystemUserProfileItem] SUPI3 ON SU.ID = SUPI3.SystemUserID AND SUPI3.SystemUserProfileItemTypeID = 3 -- Interest 
WHERE 
    SU.ID = 4604 
GROUP BY 
    SU.ID 

計算

有16列在上面的查詢,我需要檢查每列是否有數據,如果有數據,則分配一個1或者如果它爲空則分配一個0.

一旦我得到了有數據的列的總和,然後我想執行這樣的計算 - * 100 *完成的列/總列數*然後,我想要顯示它作爲該查詢的列。

基本上這個數據將被用在報告中。

我如何能做到這一點的SQL將是巨大的任何意見,感謝

+0

如果您第一次檢查時 - su.id IS NOT NULL,則1,你可以使用'CASE'-例如'CASE ELSE 0 END AS su_id_bool' - 至於你的計算,你是問如何計算或者你已經知道了? – doublesidedstickytape

+0

其中rdbms? Oracle,MySQL? SQL服務器,如果是這樣的版本2012+?同時鼓勵您根據這些數據輸入一些樣本數據和所需結果,以幫助人們將解決方案形象化。請包含爲DML語句。 http://meta.stackoverflow.com/questions/271055/tips-for-asking-a-good-structured-query-language-sql-question/271056 – Matt

+0

doublesidedstickytape - 謝謝我不知道我會怎麼做計算 – HitTheSky

回答

1
Select 
SU.ID, 
SU.[GenderID], 
SU.[TelephoneNumber], 
SU.[MobileNumber], 
SU.[AddressID], 
SU.[WebSite], 
SU.[Narrative], 
SU.[IndividualTitleID], 
SU.[DateOfBirth], 


MAX(SUED.SystemUserID) AS [SUEDID], 
MAX(SUE.ID) AS [SUEID], 
MAX(SUQ.ID) AS [SUQID], 
MAX(SUPB.ID) AS [SUPB], 
MAX(SUPQ.ID) AS [SUPQID], 
MAX(SUPI1.ID) AS [Skill], 
MAX(SUPI2.ID) AS [Achievement], 
MAX(SUPI3.ID) AS [Interest], 

100 * (
    CASE WHEN MAX(SUED.SystemUserID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUE.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUQ.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUPB.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUPQ.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUPI1.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUPI2.ID) IS NULL THEN 0 ELSE 1 END 
    + CASE WHEN MAX(SUPI3.ID) IS NULL THEN 0 ELSE 1 END 
)/8.0 

FROM [Employed].[SystemUser] SU 
LEFT OUTER JOIN [Profile].[SystemUserEducation] SUED ON SU.ID = SUED.SystemUserID 
LEFT OUTER JOIN [Profile].[SystemUserQualification] SUQ ON SUED.ID = SUQ.SystemUserEducationID 
LEFT OUTER JOIN [Profile].[SystemUserEmployment] SUE ON SU.ID = SUE.SystemUserID 
LEFT OUTER JOIN [Profile].[SystemUserProfessionalBody] SUPB ON SU.ID = SUPB.SystemUserID 
LEFT OUTER JOIN [Profile].[SystemUserProfessionalQualification] SUPQ ON SU.ID = SUPQ.SystemUserID 
LEFT OUTER JOIN [Profile].[SystemUserProfileItem] SUPI1 ON SU.ID = SUPI1.SystemUserID AND SUPI1.SystemUserProfileItemTypeID = 1 -- Skills 
LEFT OUTER JOIN [Profile].[SystemUserProfileItem] SUPI2 ON SU.ID = SUPI2.SystemUserID AND SUPI2.SystemUserProfileItemTypeID = 2 -- Achievement 
LEFT OUTER JOIN [Profile].[SystemUserProfileItem] SUPI3 ON SU.ID = SUPI3.SystemUserID AND SUPI3.SystemUserProfileItemTypeID = 3 -- Interest 

Where SU.ID = 4604 
Group by 
    SU.ID, 
    SU.[GenderID], 
    SU.[TelephoneNumber], 
    SU.[MobileNumber], 
    SU.[AddressID], 
    SU.[WebSite], 
    SU.[Narrative], 
    SU.[IndividualTitleID], 
    SU.[DateOfBirth],