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



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

背景

我对飞镖很感兴趣,所以我想创建一个数据库来记录我的每个回合。 如果您不熟悉飞镖,每个回合都包括三次投掷飞镖板。

我正在设计一个带有两个表的数据库:

    "回合
  1. "跟踪每个玩家的回合。

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

    • 分数是主键,代表投掷的一种可能结果。
    • 值包含玩家投掷的值。 所以一个"S20"值 20 分。

表摘录/示例

转弯

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

分数值

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

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

谢谢!

K

这是我认为你正在寻找的。我已经习惯了 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

您的第一个问题是您将结果集限制为 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

最新更新