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],