2016-08-30 19 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列が上記のクエリであり、I各列にデータがあるかどうかをチェックする必要があります。データがある場合は1を、それがヌルの場合は0を代入します。

データを持つ列の合計が得られたら、私はそういう計算をしたいと思っています。* 100 *完了列数/合計列数*これをそのクエリの列として表示します。

本質的に、このデータはレポートで使用されます。

私はSQLでこれを行うことができますどのように上の任意のアドバイスは素晴らしいことだ、あなたの最初のチェックをありがとう

+0

を - su.idがNULLされていない場合、あなたは 'CASE'-例えば' CASEを使用することができTHEN 1 ELSE 0 END AS su_id_bool' - あなたの計算について、あなたは計算をする方法を尋ねていますか、またはあなたはすでに知っていますか? – doublesidedstickytape

+0

どのrdbms?オラクル、mysql? SQL Serverの場合、バージョン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], 
関連する問題