2010-07-17 6 views
2

학생 이름이있는 SQLite 데이터베이스가 있습니다. 각 학생마다 다른 수업이 있습니다. 나는 학생 성적과 클래스가있는 테이블과 클래스별로 정의하는 테이블이 있습니다. 쿼리를 실행하고 싶습니다. (필자는 OpenOffice에서 편지 병합을 위해 Excel 문서로 사용할 CSV로 저장합니다). 학생의 수학, 학년, 과학, 영어 등의 점수를 기재해야합니다. 그러나 일부 학생들에게는 수학, 과학, 영어 또는 역사 수업이 1 회 이상 있습니다. (예) CASE 문 (및 뷰)을 만들 수 있습니까? 예를 들어 Math_Class_2라는보기에 실제로 나열 할 수있는 Math 클래스가 두 개 이상 있다면?일치하는 필드에 대해 CASE와 SQLITE를 사용하십시오.

+0

나는 그곳에서 무슨 의미인지는 모르겠습니다. 몇 가지 기본 테이블 정의와 원하는 출력 예제를 사용할 수 있습니까? – MPelletier

+0

파이썬 해결 방법을 만들었습니다 ... 원하는 바는 아니지만 충분히 가까워졌습니다. 이 경우 문으로 생성 뷰로 다음 코드를 복제 할 수있을 것이다 : 'cursor.execute 커서의 행 ('DISTINCT student_id, COURSE_TITLE, math_class FROM final_grade SELECT') student_id = 행 [0] COURSE_TITLE = [1] student_id == old_student_id : if student_id! = second_round_id : ... write_string = "INSERT INTO math_class_2_2010 ... 행의 [1] final_grade = 2 행 [2]' – Donnied

+0

테이블이 있습니다 : TABLE eoygrades_2010 (student_id INTEGER CHAR (6) NOT NULL, course_title VARCHAR (16), grade INTEGER CHAR (3)); 그리고 표시되지 않은 경우 math 클래스를 표시하기 위해 case 문을 만들려고했습니다. 대신 : 사전 수 지 : 나는 한 줄 에디, 대수학, 90, 기하학, 80 을 인쇄 할 수 있습니다 (80) 에디, 대수학, 90 에디, 기하학, 하나의 수학 수업에 그들을위한 -Cal, 85 ,, – Donnied

답변

1

아이디어는 SQL을 작업으로 만드는 것이지 그것을위한 것이 아닙니다.

가정하면 세 개의 테이블 :

학생 (StudentNo, StudentName)

클래스 (ClassNo, 클래스 이름)

결과 (ClassNo, StudentNo, 학년)

쿼리는 다음과 같습니다

SELECT StudentName, group_concat(ClassName || "," || Grade) 
FROM Student 
INNER JOIN Result ON Result.StudentNo=Student.StudentNo 
INNER JOIN Class ON Result.ClassNo=Class.ClassNo 
GROUP BY Student.Studentno; 

(group_concat은 다른 후기 덧셈 SQlite에. 3.7에 존재).

Jimmy,English,70,Algebra,75,Geometry,80

Bob,English,85,Algebra,90

: 쿼리를 실행

CREATE TABLE [Student] (
[StudentNo] INTEGER NOT NULL PRIMARY KEY, 
[StudentName] TEXT NULL 
); 
INSERT INTO "Student" VALUES(1,'Jimmy'); 
INSERT INTO "Student" VALUES(2,'Bob'); 
INSERT INTO "Student" VALUES(3,'Anna'); 
CREATE TABLE [Class] (
[ClassNo] INTEGER NOT NULL PRIMARY KEY, 
[ClassName] TEXT NULL 
); 
INSERT INTO "Class" VALUES(1,'English'); 
INSERT INTO "Class" VALUES(2,'Algebra'); 
INSERT INTO "Class" VALUES(3,'Geometry'); 
INSERT INTO "Class" VALUES(4,'Pre-Cal'); 
CREATE TABLE [Result] (
[StudentNo] INTEGER NOT NULL, 
[ClassNo] INTEGER NOT NULL, 
[Grade] INTEGER NOT NULL, 
PRIMARY KEY ([StudentNo],[ClassNo]) 
); 
INSERT INTO "Result" VALUES(1,1,70); 
INSERT INTO "Result" VALUES(1,2,75); 
INSERT INTO "Result" VALUES(1,3,80); 
INSERT INTO "Result" VALUES(2,1,85); 
INSERT INTO "Result" VALUES(2,2,90); 
INSERT INTO "Result" VALUES(3,4,95); 

이 (당신이 당신의 분리 문자를 조정할 수 있습니다) 반환 여기

내가 사용하는 모든 명령의 덤프입니다

Anna,Pre-Cal,95

0

내 두 센트 ...

현재 sqlite 데이터베이스를 사용하는 Android 앱을 개발 중입니다. CASE 문을 사용해야하고 이 작동했습니다..

표에는 밀리 초 단위의 시간 빈도 값이있는 열이 있지만 이해하기 쉬운 정보로 표시해야하는 최종 사용자에게는 이것이 사용 된 SQL 문입니다. 명령문을 프로그램 적으로 정리하면 하드 코드되지 않습니다.) : -p

SELECT 
case when alarm_time_frequency='0' then 'Not Used' 
when alarm_time_frequency='300000' then '5 min' 
when alarm_time_frequency='600000' then '10 min' 
when alarm_time_frequency='900000' then '15 min' 
when alarm_time_frequency='1800000' then '30 min' 
when alarm_time_frequency='3600000' then '1 hour' 
when alarm_time_frequency='7200000' then '2 hours' 
when alarm_time_frequency='10800000' then '3 hours' 
when alarm_time_frequency='14400000' then '4 hours' 
when alarm_time_frequency='21600000' then '6 hours' 
when alarm_time_frequency='28800000' then '8 hours' 
when alarm_time_frequency='43200000' then '12 hours' 
when alarm_time_frequency='86400000' then '24 hours' 
end 
as alarm_time_frequency FROM ALARMS 

I hope this helps... 
관련 문제