SQL:为IMDb个人项目将单个评级表压缩为一个
我目前正在做一个个人项目,我需要一些帮助 情景: 我正在为我自己和一些朋友看过的所有电影创建一个数据库(MS Access)。我们在IMDb上对所有电影进行评级,并使用导出功能获取所有电影数据和电影评级。我计划在Excel上做一些总结分析。我在SQL和关系数据库方面的经验不多,但我真的很喜欢它,这个项目帮助我更好地理解它 问题: 下面是存储所有电影信息的“我的表”的外观(SQL:为IMDb个人项目将单个评级表压缩为一个,sql,ms-access,imdb,Sql,Ms Access,Imdb,我目前正在做一个个人项目,我需要一些帮助 情景: 我正在为我自己和一些朋友看过的所有电影创建一个数据库(MS Access)。我们在IMDb上对所有电影进行评级,并使用导出功能获取所有电影数据和电影评级。我计划在Excel上做一些总结分析。我在SQL和关系数据库方面的经验不多,但我真的很喜欢它,这个项目帮助我更好地理解它 问题: 下面是存储所有电影信息的“我的表”的外观(const用作主键): 然后,对于每个单独的评分员,我有一个单独的表,其中const,和[您的评分]作为列,如詹姆斯的评分所
const
用作主键):
然后,对于每个单独的评分员,我有一个单独的表,其中const
,和[您的评分]
作为列,如詹姆斯的评分所示:
我想将所有单独的评分表压缩成一个表,列为:
rater
(即James、Alex、Doug)、const
和yourRate
。我该怎么做呢?如果以一致的方式命名包含评级的各个表,最简单的方法是使用vba函数从不同的表中提取数据并将其插入新表中
例如,如果您有一个新的表ratings(rater,const,yourrating)
并希望从名为R\u JAMES
的表中插入评级,则此代码将执行以下操作:
Function InsertRatings()
Dim rs As New ADODB.Recordset
Dim strSql As String
strSql = "SELECT name FROM MSysObjects WHERE Type=1 AND Flags=0 AND Name like 'R[_]J%';"
rs.Open strSql, CurrentProject.Connection
DoCmd.SetWarnings False
Do While Not rs.EOF
strSql = "INSERT INTO ratings SELECT '" + rs!Name + "' AS Rater, const, [you rated] as yourrate from " + rs!Name + ";"
DoCmd.RunSQL strSql
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
DoCmd.SetWarnings True
End Function
将其添加为visual basic模块,并在需要时调整列名后运行它。您可以使用类似的联合查询
select "rater 1" as rater, const, [you rated] from [rater 1]
union select "rater 2", const, [you rated] from [rater 2]
...
union select "rater n", const, [you rated] from [rater n]
这不会生成一个新表,但在大多数情况下,可以将查询当作一个表来使用
要进行联合查询,请在“设计”视图中打开一个新查询,不要选择任何要放入其中的表,然后在SQL视图中查看is。输入上面的代码,每个评分员需要包含一行。如果必须有一个表作为结果:如果必须有一个表作为结果:1)编写我前面的答案中描述的联合查询,然后2)编写一个使用联合作为输入并创建所需表的make table查询。另一方面,我认为工会给了你你所需要的。