我是一名IT分析师,他试图学习一些SQL来帮助我以更有效的方式与开发人员合作。给自己一个小小的个人项目来帮助我学习SQL并遇到一些我希望你们都可以帮助我的问题。
背景
我对飞镖感兴趣,所以我想创建一个数据库来记录我的每一个回合。如果你不熟悉飞镖,每个回合都会在飞镖盘上投掷三次。
我正在设计一个包含两个表的数据库:
“转身”会跟踪每位玩家的回合。
“ScoreValues”是一个参考表,列出了分数和分数值的分数。每条记录将一个“分数”与“值”相关联。 “得分”是主要关键。
表格摘录/样本
匝
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
您对我如何获得预期输出有什么建议吗?如果有任何不清楚的地方,请告诉我。
谢谢!
ķ
答案 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