Несколько подсчетов в многостольном запросе SQL - PullRequest
0 голосов
/ 11 июля 2011

Я хотел бы посчитать разные запросы по идентификаторам опросов и сгруппировать их по SubjectValue

Я сделал это только для одной таблицы с подзапросом, но я не уверен, что делать это снесколько.Кто-нибудь может мне помочь?

Вот как объединяются 3 таблицы.Единственными значениями примечания являются

subjectValue - Table A
Request_Id - Table A
Survey_Id - Table C
SELECT     TableA.SubjectValue
FROM          TableB INNER JOIN
                       TableA ON TableB.ID = TableA.Request_ID INNER JOIN
                       Table C ON TableB.Details_ID = TableC.ID

Могу я также добавить, что все значения должны быть возвращены в одной строке.

есть 3 разных идентификатора опроса, поэтому для подсчета потребуется условие where для survey_id.

Надеюсь, что это имеет смысл.

Большое спасибо заранее.

Ответы [ 2 ]

4 голосов
/ 11 июля 2011

Вы можете использовать общий метод кросс-таблицы

select 
    TableA.SubjectValue,
    SUM(case when somecol='request1' then 1 else 0 end) as request1,
    SUM(case when somecol='request2' then 1 else 0 end) as request2,
    .
TableB INNER JOIN
                       TableA ON TableB.ID = TableA.Request_ID INNER JOIN
                       Table C ON TableB.Details_ID = TableC.ID
group by
    TableA.SubjectValue
1 голос
/ 11 июля 2011

Возможно, вам не нужно присоединяться к таблице C (опросы), если у вас есть внешний ключ к таблице B (запросы).

попробуйте это.

SELECT TableA.SubjectValue, COUNT(TableB.SurveyID)
FROM TableB 
INNER JOIN TableA ON TableB.ID = TableA.Request_ID 
Group by TableA.SubjectValue

РЕДАКТИРОВАТЬ:Чтобы включить SurveyID, используйте это ..

SELECT      TableC.SurveyID, TableA.SubjectValue, COUNT(TableB.RequestId)
FROM        TableA 
INNER JOIN  TableB ON TableB.SurveyID = TableA.SurveyID 
INNER JOIN  TableC ON TableC.RequestID = TableB.RequestID
Group by TableA.SubjectValue, TableC.SurveyID

(надеюсь, я не перепутал свои A, B и C.)

...