2017-08-29 11 views
1

私はsqliteで新しく、私は3つのテーブル、学生、クイズ、およびマークシートを持っています。私は単一のsqliteクエリでCVSにすべてのデータを書きたいと思う。ループと条件のコードをコードから削除し、単一のクエリで処理したい。私はSQLでクエリを作成しましたが、SQLliteでどのようにすべきか分かりません。 2次元(学生数とクイズ数)のようです。 Studentテーブル:2次元レコード(学生対クイズ)を取得するSQLiteクエリ

Id | StudentId | Name  
1 | 001  | ABC 

2 | 002  | EFG 

3 | 003  | XYZ 

クイズテーブル:

QId |TotalMark | Question  

1 | 10  | ABC 

2 | 10  | TUI 

3 | 10  | LMP 

Marksheetテーブル:

SId | QID | Marks 

001 | 1 | 4 

002 | 1 | 6 

003 | 1 | 7 

001 | 2 | 5 

002 | 2 | 6 

003 | 2 | 7 

001 | 3 | 9 

002 | 3 | 6 

003 | 3 | 7 

必要な出力は、次のとおりです。

Id | StudentId | Name | ABC | TUI| LMP 

1 | 001  | ABC | 4 | 5 | 6 

2 | 002  | EFG | 4 | 5 | 6 

3 | 003  | XYZ | 4 | 5 | 6 

DROP TABLE H; 
DROP TABLE T; 
SELECT TOP 1 
     STUFF((SELECT ', ' + M.title 
       FROM dbo.marksheet M 
         INNER JOIN marksheet_item MI ON M.marksheet_id = MI.marksheet_id 
         INNER JOIN dbo.student SS ON SS.stu_id = MI.stu_id 
       WHERE S.stu_id = SS.stu_id 
       FOR 
       XML PATH('') 
      ), 1, 2, '') AS ReportHeader 
INTO H 
FROM student S 
GROUP BY S.stu_id,S.stu_name; 

SELECT MIN(stu_id) AS ID , 
     S.stu_id ,S.stu_name, 
     STUFF((SELECT ', ' + CAST(MI.marks AS VARCHAR(50)) 
       FROM dbo.marksheet M 
         INNER JOIN marksheet_item MI ON M.marksheet_id = MI.marksheet_id 
         INNER JOIN dbo.student SS ON SS.stu_id = MI.stu_id 
       WHERE S.stu_id = SS.stu_id 
       FOR 
       XML PATH('') 
      ), 1, 2, '') AS report 
INTO t 
FROM student S 
GROUP BY S.stu_id,S.stu_name; 

SELECT *FROM h; 
SELECT *FROM t; 
+0

@sagar、フォーマットのおかげで、どのようにテーブルをフォーマットしますか? – khawarPK

+0

Ctrl + Shift + Kを使用する –

+0

@sagarありがとうございます。 – khawarPK

答えて

1

あなたはしないでください。

SQLiteはローカルで動作します。したがって、ネットワークの待ち時間やトランザクションの問題などはほとんどありません。これは、一般的なDBMSで複数の問合せを避け、複雑な文を実行する必要がある理由です。

SQLiteでは、テーブルの作成と削除、複雑なクエリの解釈のオーバーヘッドは、ロジックをコードに書き込むだけの場合に比べて、比較的大きくなります。あなたは問題なしでfire hundreds of queries select without running into performance issuesできます。

また、テーブルやデータを作成したり削除したりすると、明示的なクリーンアップを実行するまでSQLiteが削除しないため、ストレージファイルが肥大化するだけです。

関連する問題