인구 통계 데이터 세트에 쓰는 다소 복잡한 SQL Server 쿼리가 있습니다. 나는 얼마나 많은 응답자가 시스템에 특정 인구 통계를 알아낼 필요가있다.인구 통계 데이터 세트에 대한 강력한 SQL 쿼리
주 테이블이 2 개 있습니다. 관련 칼럼을 열거합니다. 각 행에 고유 한 ID가 있다고 가정합니다.
표 응답자 :
[RespondentID] [SystemEntryDate]
표 RespondentProfiles : RespondentProfiles 응답자 링크에
[QuestionID] [AnswerID]
응답자 ID. 응답 된 각 질문마다 행이 작성됩니다. 질문 id는 특정 질문 (성별, 민족, 주 및 자동차 소유권)에 해당하며 답변 ID는 질문에 따라 다른 것을 의미합니다. 1은 남성, 2는 여성, 1은 백인, 2 명의 히스패닉, 3 명의 태평양 섬 주민 등이 될 수 있습니다.
또한 Conditions라는 표가 있습니다. 조건 표는 다음과 같습니다.
[ConditionSetID] [QuestionID] [AnswerID]
조건 집합 ID는 조건 집합과 함께 조건 집합에 연결됩니다. 그래서 조건 집합 ID를 질의에 전달할 수 있으며, 응답자가 해당 기준을 충족시키는 횟수와 해당 집합의 최소 및 최대 날짜를 반환합니다.
내 쿼리가 같은 것을 볼 것이다 : 예를 들어
create procedure query
@ConditionSetID int
as
select count(distinct r.ID) as Respondents,
min(r.SystemEntryDate) as EarliestDate,
max(r.SystemEntryDate) as LatestDate
from Respondents r
join RespondentProfiles rp
on r.ID = rp.RespondentID
join Conditions c
on c.ConditionSetID = @ConditionSetID
and c.QuestionID = rp.QuestionID
where rp.QuestionID = c.QuestionID
and rp.Condition = c.AnswerID
을, 나는 응답자가이
[RespondentID] [QuestionID] [AnswerID]
10001 1 (gender) 1 (male)
10001 2 (ethnicity) 1 (white)
10001 3 (car) 23 (lexus)
10002 1 (gender) 2 (female)
10002 2 (ethnicity) 2 (black)
10002 3 (car) 24 (buick)
10003 1 (gender) 2 (female)
10003 2 (ethnicity) 1 (white)
10003 3 (car) 5 (honda)
10004 1 (gender) 1 (male)
10004 2 (ethnicity) 2 (black)
10004 3 (car) 24 (buick)
같은 테이블을 프로필 및있을 수 있습니다 나는 특정 조건 세트 행을 선택하는 경우 ID는 다음과 같을 수 있습니다.
[QuestionID] [AnswerID]
1 (gender) 2 (female)
2 (ethnicity) 2 (black)
3 (car) 24 (buick)
이렇게하면 모든 흑인 여성에게 wh O EM 1.
의 수를 제공해야합니다 아니면 내가 가질 수있는, 뷰익 자신이 3 백성이 될 것이다 뷰익이나 렉서스를 소유하고 모든 사람에게 요구하고있다
[QuestionID] [AnswerID]
3 (car) 23 (lexus)
3 (car) 24 (buick)
.
그리고 최종 예를 들어 :
[QuestionID] [AnswerID]
2 (ethnicity) 2 (black)
3 (car) 23 (lexus)
3 (car) 24 (buick)
이이 검은 색과 렉서스를 소유하거나 모든 사람들에게 요구하고 검은 색과 이명 것 뷰익을 소유하고 모든 사람.
나는 이것이 끔찍하게 복잡하지 않다는 것을 알고있다. 그러나 나는 아직 시도한 가장 복잡한 일이며, 어떤 도움도 크게 감사 할 것이다. where 절을 설정하는 방법을 알아내는 데 많은 어려움을 겪고 있으며 일반적인 방향조차도 인정할 것입니다. respondentprofiles 테이블에는 약 800,000 개의 레코드가 있으므로 효율적이어야합니다.
내가 설정 한 where 절은 정확하지 않습니다. 다른 질문이 or'ed와 반대되는 것처럼 함께 기록되는 것처럼 레코드를 얻게되기 때문입니다. 따라서 하나의 답변 만 일치하더라도 해당 응답자의 행이 반환됩니다. 이는 잘못된 것입니다.특정 응답자는 선택하도록 설정된 조건의 모든 조건을 충족해야합니다.
아마 내가 임시 테이블 질문을 한 번에 선택해야합니까? 아니면 어떤 종류의 그룹화를 사용합니까? 나는이 곳을 어디로 가야하는지 정말로 혼란 스럽다. 나는 나의 딜레마를 적절히 설명하기에 충분한 정보를 제공했으면한다. 대답 응답자의 응답자 ID를 얻을하는 방법을 보여줍니다 아래
조건 테이블이 필요하다고 생각하지 않습니다. 관리하기가 매우 어렵다고 생각합니까? 이러한 테이블을 사용하지 않고 (서브 쿼리 또는 인라인 뷰를 사용하여) 2 개의 응답 만이 아닌 응답 프로파일을 집합 적으로 쿼리 할 수 있습니다. –
mysql 또는 sql 서버를 사용하고 있습니까? 둘 다 태그를 붙였습니다. –