SQL:将个人评级表汇总为一个用于IMDb个人项目

时间:2015-02-06 17:51:09

标签: sql ms-access imdb

我目前正在从事个人项目,我可以稍微帮忙一下。

方案:

我自己创建了一个数据库(MS Access)以及一些朋友曾经看过的电影。我们在IMDb上对所有电影进行了评分,并使用导出功能获取所有电影数据和我们的电影评级。我计划对Excel进行一些总结分析。我对SQL和关系数据库的经验很少,但我真的很喜欢它,这个项目帮助我更好地理解它。

问题:

这是我的表格所存储的所有电影信息(const用作主键。): enter image description here

然后,对于每个评估者,我都有一个单独的表格,其中const[You rated]作为列,如此处显示的詹姆斯'评级:

http://imgur.com/StTd1QO

我想将所有单独的表格用于评级,并将它们压缩到一个表格,其中包含以下列:rater(即James,Alex,Doug),{{1} }和const。我该怎么做呢?

2 个答案:

答案 0 :(得分:0)

如果您以一致的方式命名持有评级的各个表,最简单的方法是使用vba函数从不同的表中提取数据并将其插入新表中。

例如,如果您有一个新表ratings (rater, const, yourrating)并希望从名为R_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

将其添加为可视化基本模块,并在需要时调整列名后运行它。

答案 1 :(得分:0)

您可以使用类似

的联合查询
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视图中。输入上面的代码,每个评估者需要包含1行。