2

複数のテーブルからデータを取得するのに助けが必要です。

これは私が持っているテーブルです:

_______________   ______________   ___________  _______________  _____________
|_tblUsers____|   |_tblAnswers__|  |_tblAlt__|  |_tblQuestion_|  |_survey_____|
| userID      |   | answerAltID |  | altID   |  | questID     |  | surveyID   |
| username    |   | userID      |  | altText |  | questText   |  | surveyName |
|_____________|   |_____________|  |_questID_|  |_surveyID____|  |____________|

TblUsers にはシステム内のユーザーのリストがあり、tblAnswers にはユーザーから与えられたすべての回答があり、tlbAlt には質問の代替案があり、tblQuestion には質問があります。tblSurveys というテーブルがもう 1 つありますが、ID は tblQuestion に記載されているため、ここでは必要ありません。

これは私がこれまでに持っているものです:

SELECT
tblQuestion.questText,
tblAlt.altText,
Count(tblAnswers.answerID) as answers_count,
(SELECT COUNT(answerID) FROM tblAnswers, tblAlt 
WHERE tblAnswers.answerAltID = tblAlt.altID 
AND tblAlt.questID = " & CInt(questionID) & ") as total_count
FROM tblAlt, tblQuestion
LEFT JOIN tblAnswers ON (tblAlt.altId = tblAnswers.altID)
WHERE tblAlt.questID = " & CInt(questionID) & "
GROUP BY tblAlt.altText;

これは、次のような行を返します。

| | ブラブラブラとは?| | 答えは... | 2 (回答済み) | 10 (合計回答数) |

残念ながら、これは 1 つの質問のすべての行しか返しません。(調査 ID に基づいて) 同じ調査の一部であるすべての行を取得する方法はありますか?

出力を次のようにしたい場合:

| | ブラブラブラとは?| | 答えは... | 2 (回答済み) | 10 (合計回答数) | 調査名 |

すべての選択肢を返したい (回答数、合計回答数、関連する質問とアンケート)。


アップデート:

これは私の入力です:

SELECT tblalternativ.altTekst, tblalternativ.altID, Count(tblsvar.svarAltID) as antSvar, 
(SELECT COUNT(*) FROM tblsvar, tblalternativ 
WHERE tblsvar.svarAltID = tblalternativ.altID 
AND tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ") as antTotal, 
(SELECT Count(*) FROM tblalternativ WHERE altSpmID = " & CInt(lblQuestion.Tag) & ") as spmTotal 
FROM(tblalternativ) LEFT JOIN tblsvar ON (tblalternativ.altId = tblsvar.svarAltID) 
WHERE(tblalternativ.altSpmID = " & CInt(lblQuestion.Tag) & ")
GROUP BY tblalternativ.altTekst ORDER BY tblalternativ.altID ASC

私の出力:

altTekst    altID   antSvar antTotal    spmTotal
Black         83         1      3              5
Green         84         1      3              5
Yellow        85         1      3              5
White         86         0      3              5
Pink          87         0      3              5

ただし、これは 1 つの質問の統計のみを表示します。1 つの調査ですべての質問を表示したい。altTekstそのため、その調査、質問名、および調査の ID のすべてを取得する必要があります。

私が欲しい:

spmTekst      altTekst  altID   antSvar antTotal    spmTotal   evalID
What is...    Black         83         1        3          5        1
What is...    Green         84         1        3          5        1
What is...    Yellow        85         1        3          5        1
What is...    White         86         0        3          5        1
What is...    Pink          87         0        3          5        1
Who is....    The king      88         2        3          3        1
Who is....    The pope      89         0        3          3        1
Who is....    The president 90         1        3          3        1
Which....     Shoe          91         2        3          2        1
Which....     Hat           92         1        3          2        1

つまり、同じアンケートのすべての質問からの統計が必要です (evalID に基づく)。

4

2 に答える 2

1

これを試してください(まったく最適化されておらず、調査部分を追加しただけです):

SELECT    tblQuestion.questText, tblAlt.altText, 
          Count(tblAnswers.answerAltID) AS answers_count,
           (SELECT COUNT(answerAltID) FROM tblAnswers, tblAlt 
           WHERE  tblAnswers.answerAltID = tblAlt.altID AND 
                  tblAlt.questID = " & CInt(questionID) & ") as total_count,
          survey.surveyName
FROM      survey, tblQuestion, tblAlt
LEFT JOIN tblAnswers ON (tblAlt.altId = tblAnswers.answerAltID)
WHERE     tblAlt.questID = " & CInt(questionID) & " AND 
          tblQuestion.surveyID = survey.surveyID
GROUP BY  tblAlt.altText;

編集:これを試してください:

SELECT    tblQuestion.questText AS spmTekst, tblAlt.altText AS altTekst, 
          tblAlt.altID, 
          Count(tblAnswers.answerAltID) AS antSvar,
          COUNT(tblAlt.altID) AS antTotal,
          COUNT(tblQuestion.questID) AS spmTotal,
          survey.surveyID AS evalID
FROM      tblQuestion 
JOIN      survey ON (survey.surveyID = tblQuestion.surveyID)
JOIN      tblAlt ON (tblAlt.questID = tblQuestion.questID)
LEFT JOIN tblAnswers ON (tblAnswers.answerAltID = tblAlt.altID)
WHERE     tblAlt.questID = " & CInt(questionID) & " AND -- what really is this? review this
          survey.surveyID = '123' -- the value u want
GROUP BY  tblAlt.altText
ORDER BY  tblAnswers.answerAltID;
于 2012-05-08T18:40:37.300 に答える