2017-09-28 12 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 

나는 두 가지 대답 '아니오'와 '예'에 대한 %로 표시하는 열을 추가 할 그래서 '아니오'나 '20'을 원하는 옆에 옆에 '예' '80'을, 그러나 나는 이것에 아주 새롭다 붙어 있고; 나는 어떤 도움을 주셔서 감사합니다. 감사.

Result of working script

+0

안녕하세요 @rolando, 그것을 이해하는 데 도움이되도록 SQL 코드를 올바르게 포맷하십시오! thx – ciccioska

답변

0

당신은 외부 SELECT가 필요하지 않습니다.

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 될 것입니다, 그래서 당신은 분할 전에 floatscast해야합니다. 원하는 형식으로 추가 서식을 지정할 수 있습니다. 또한 귀하의 데이터가 어떤 모양인지 모르기 때문에 정확한 분모가 없을 수도 있지만 필요에 맞게 수정할 수 있습니다.

+0

와우, 고마워. 조. 정말 빨랐어. 나는 일 동안 응답을 기대하지 않았다! 나는 당신의 제안 된 코드를 시도하고 반환 된 백분율 이외의 0.401606425702811 및 1.60642570281124; 그 비율은 2에서 8이 될 것입니다. 제가 찾고있는 20과 80을 얻는 방법을 알아낼 수 있는지 보겠습니다. 다시 한 번 감사드립니다! – rolando

+0

@rolando - 이것은 내가 당신의 데이터가 어떤 모습인지 몰랐다는 것을 의미했습니다. 방금 전 일대일 조인이라고 생각했습니다. [dbo]. [ParticipantNSChoices]에서 선택 횟수 (*)를하는 대신 [dbo]. [KnowledgeSurveyAnswers] 및 [dbo]. [KnowledgeSurveyQuestions] 및 [dbo]에 가입해야합니다. [AspNetUsers] 총 인구/우주의 더 정확한 계산. – Joe

+0

@rolando -이 답변이 귀하의 필요를 충족시키는 경우이 답변을 선택하여 질문을 마무리하십시오. – Joe