SQL查询编写帮助 - 一个记录中的多个查找

时间:2013-11-15 15:42:37

标签: sql

我是一名IT分析师,他试图学习一些SQL来帮助我以更有效的方式与开发人员合作。给自己一个小小的个人项目来帮助我学习SQL并遇到一些我希望你们都可以帮助我的问题。

背景

我对飞镖感兴趣,所以我想创建一个数据库来记录我的每一个回合。如果你不熟悉飞镖,每个回合都会在飞镖盘上投掷三次。

我正在设计一个包含两个表的数据库:

  1. “转身”会跟踪每位玩家的回合。

    • TurnID是主键,是一个自动递增的整数。
    • Throw1包含玩家第一次投掷的结果。
    • Throw2包含玩家第二次投掷的结果。
    • Throw3包含玩家第三次投掷的结果。
  2. “ScoreValues”是一个参考表,列出了分数和分数值的分数。每条记录将一个“分数”与“值”相关联。 “得分”是主要关键。

    • 分数是主键,代表一次投掷的可能结果。
    • 值包含玩家掷骰子的值。所以“S20”值得20分。
  3. 表格摘录/样本

    TurnID   Throw1   Throw2   Throw3
    101      S20      S16      S18
    102      S16      S19      S17
    

    ScoreValues

    Score   Value
    S20     20
    S19     19
    S18     18
    S17     17
    S16     16
    S15     15
    

    查询

    这是挑战的开始。我正在寻找一个将生成如下所示输出的查询:

    TurnID   Throw1   Throw2   Throw3   Throw1Value   Throw2Value   Throw3Value
    101      S20      S16      S18      20            16            18
    102      S16      S19      S17      16            19            17
    

    如果我运行以下查询,我可以排序获取我正在寻找的内容,但仅限于Throw1:

    SELECT Turns.TurnID, Turns.Throw1, Turns.Throw2, Turns.Throw3, ScoreValues.Value
    FROM Turns
    INNER JOIN  Values on Turns.Throw1 = ScoreValues.Score
    

    您对我如何获得预期输出有什么建议吗?如果有任何不清楚的地方,请告诉我。

    谢谢!

    ķ

2 个答案:

答案 0 :(得分:1)

以下是我认为您正在寻找的内容。我已经习惯了Oracle,但希望它也适用于其他版本:

SELECT T.TurnID, 
    T.Throw1, 
    T.Throw2, 
    T.Throw3,
    (SELECT value from ScoreValues where score = t.Throw1) as Throw1Value,
    (SELECT value from ScoreValues where score = t.Throw2) as Throw2Value,
    (SELECT value from ScoreValues where score = t.Throw3) as Throw3Value,
FROM Turns t

答案 1 :(得分:0)

您的第一个问题是您将结果集限制为Throw1。任何过滤/限制,你可能想在where子句中使用TurnId。在您的示例中,没有调用where子句。对于这么简单的事情,您可以使用以下内容:

SELECT TurnId, Throw1, Throw2, Throw3, ThrowValue1 = 
(select value from ScoreValues where Score = Throw1),
ThrowValue2 = (select value from ScoreValues where Score = Throw2),
ThrowValue3 = (select value from ScoreValues where Score = Throw3)
FROM Turns

以下是一些解释数据透视表的网站,这是按列表示行值的概念。随着查询的复杂性增加,您将要使用此: http://blog.sqlauthority.com/2008/05/22/sql-server-pivot-table-example/ http://msdn.microsoft.com/en-us/library/ms177410(SQL.105).aspx