2017-09-28 8 views
-1

以下のイメージが出力され、次のように動作します。MSSQL:ネストされたサブクエリの結果を使用

SELECT 
    SU_Internal_ID, 
    NQ_QuestionText, 
    NA_AnswerText, 
    NoOfTimesChoosen 
FROM 
    (SELECT 
     U.SU_Internal_ID, 
     NQ.NQ_QuestionText, 
     NA.NA_AnswerText, 
     COUNT(PC.UserID) AS NoOfTimesChoosen 
    FROM [dbo].[ParticipantNSChoices] PC 
    INNER JOIN [dbo].[KnowledgeSurveyAnswers] NA 
     on PC.NA_Internal_ID = NA.NA_Internal_ID 
    INNER JOIN [dbo].[KnowledgeSurveyQuestions] NQ 
     on PC.NQ_Internal_ID = NQ.NQ_Internal_ID 
    INNER JOIN [dbo].[AspNetUsers] U 
     on PC.UserID = U.Id 
    WHERE 
     U.SU_Internal_ID=1 
     and NQ.NQ_QuestionText LIKE '%Do you feel comfortable working with computers%' 
    GROUP 
     BY U.SU_Internal_ID, 
     NQ.NQ_QuestionText, 
     NA.NA_AnswerText) as A 

私は2つの答え「いいえ」のためのパーセントを表示するために列を追加し、「はい」にしたい:「いいえ」私が望む「20」と「はい」「80」に次のように次の、しかし、私はこれでかなり新しいですし、つかまっています。助けていただければ幸いです。ありがとう。

Result of working script

+0

こんにちは@rolando、私たちはそれを理解するために、あなたのSQLコードを正しくフォーマットしてください! thx – ciccioska

答えて

0

あなたは外側のSELECTを必要としません。あなたが割る前にfloatsとしてcastに必要なので、

SELECT 
    U.SU_Internal_ID, 
    NQ.NQ_QuestionText, 
    NA.NA_AnswerText, 
    COUNT(PC.UserID) AS NoOfTimesChoosen, 
    (cast(COUNT(PC.UserID) as float)/
     cast(
      (select count(*) from [dbo].[ParticipantNSChoices] PC2 
       INNER JOIN [dbo].[KnowledgeSurveyAnswers] NA2 on PC2.NA_Internal_ID = NA2.NA_Internal_ID 
       INNER JOIN [dbo].[KnowledgeSurveyQuestions] NQ2 on PC2.NQ_Internal_ID = NQ2.NQ_Internal_ID 
       INNER JOIN [dbo].[AspNetUsers] U2 on PC2.UserID = U2.Id 
       WHERE 
        U2.SU_Internal_ID=1 
        and NQ2.NQ_QuestionText LIKE '%Do you feel comfortable working with computers%') 
      as float)) 
      * 100 as PercentChosen 
FROM [dbo].[ParticipantNSChoices] PC 
INNER JOIN [dbo].[KnowledgeSurveyAnswers] NA 
    on PC.NA_Internal_ID = NA.NA_Internal_ID 
INNER JOIN [dbo].[KnowledgeSurveyQuestions] NQ 
    on PC.NQ_Internal_ID = NQ.NQ_Internal_ID 
INNER JOIN [dbo].[AspNetUsers] U 
    on PC.UserID = U.Id 
WHERE 
    U.SU_Internal_ID=1 
    and NQ.NQ_QuestionText LIKE '%Do you feel comfortable working with computers%' 
GROUP 
    BY U.SU_Internal_ID, 
    NQ.NQ_QuestionText, 
    NA.NA_AnswerText 

countsは、integersになります。さらに好みのフォーマットにすることができます。また、私はあなたのデータがどのように見えるかわからないので、あなたの正確な分母を持っていない可能性がありますが、必要なものに合わせて変更することができます。

+0

うわー、あまりにもジョー、ありがとう、本当に速かった。私は数日間の答えを期待していなかった!私はあなたの提案したコードを試して、それは0.401606425702811と1.60642570281124です返されたパーセンテージ以外の仕事をした;それは2対8の比率になります。私が探している20と80をどうやって得るのか分かりますか?再度、感謝します! – rolando

+0

@rolando - これは、あなたのデータがどのように見えているか分からないと言ったときのことです。私はそれがすべて1対1の結合であると仮定しました。 [dbo]。[ParticipantNSChoices]でselect count(*)を実行する代わりに、おそらく[dbo]。[KnowledgeSurveyAnswers]と[dbo]。[KnowledgeSurveyQuestions]と[dbo]。[AspNetUsers]に参加する必要があります。あなたの総人口/宇宙のより正確な数。 – Joe

+0

@rolando - この回答があなたのニーズを満たしている場合は、この回答を選択して質問を終了してください。 – Joe

関連する問題