2017-08-29 74 views
1

我是新的sqlite,我有三个表,学生,测验和标记表。我想用单个sqlite查询在CVS中编写所有数据。我想从代码和单个查询处理中删除多个循环和条件。我在sql中创建了查询,但我不明白它应该在SQLlite中。它看起来像二维(学生数量与测验次数)。 学生表:SQLite查询获取两个国际记录(学生vs测验)

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在执行明确的清理之前不会删除。