SQL Server 2012-创建显示查询中百分比的计算列

SQL Server 2012-创建显示查询中百分比的计算列,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要为报表创建一个查询,捕获已填充数据的百分比,并将其显示为计算列 到目前为止,我已经使用连接编写了一个查询,以获取所需的数据: 查询: SELECT SU.ID, MAX(SU.[GenderID]), MAX(SU.[TelephoneNumber]), MAX(SU.[MobileNumber]), MAX(SU.[AddressID]), MAX(SU.[WebSite]), MAX(SU.[Narrative]),

我需要为报表创建一个查询,捕获已填充数据的百分比,并将其显示为计算列

到目前为止,我已经使用连接编写了一个查询,以获取所需的数据:

查询:

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*已完成的列/total columns*,然后我想将其显示为该查询的列

基本上,这些数据将用于报告中


关于如何在SQL中执行此操作的任何建议都将非常好,谢谢您的第一次检查-您可以使用
CASE
-例如
CASE当su.id不为NULL时,则1或0结束为su\u id\u bool
-对于您的计算,您是在询问如何进行计算,还是已经知道了哪些rdbms?甲骨文,mysql?sql server,如果是,版本2012+?还鼓励您输入一些示例数据和基于这些数据的期望结果,这有助于人们可视化解决方案。请包括DML声明。doublesidedstickytape-谢谢,我不知道我会怎么做计算Matt-注意到,我会在哪里更新
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],