2013-11-15 29 views
1

我是一位IT分析師,試圖學習一些SQL,以幫助我以更高效的方式與開發人員合作。給自己一個小小的個人項目來幫助我學習SQL,並遇到一些我希望你們都可以幫助我的問題。SQL查詢寫作幫助 - 在一個記錄中查找多個

背景

我有飛鏢的興趣,所以我想建立一個數據庫,以記錄我的每一個圈。如果你不熟悉飛鏢,每轉都由三個擲鏢靶組成。

我設計一個數據庫有兩個表:

  1. 「打開」跟蹤每個玩家的回合。

    • TurnID是主鍵,是一個自動遞增的整數。
    • Throw1包含玩家第一次扔的結果。
    • Throw2包含玩家第二次投擲的結果。
    • Throw3包含了玩家第三次投擲的結果。
  2. 「ScoreValues」是一個參考表,其中列出了分數和分數值。每條記錄將一個「分數」與一個「價值」相關聯。 「分數」是主鍵。

    • 得分是主鍵,代表了一次投擲的可能結果。
    • Value包含玩家的投擲值。所以「S20」值20分。

表摘錄/樣品

打開

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 

對於如何獲得預期輸出,您有任何建議嗎?請讓我知道,如果有什麼不清楚。

謝謝!

K

+0

嘗試'pivot'表格方式。 – Bharadwaj

+0

答案取決於你的rdbms,你沒有指定。 –

+0

哎呀,對不起,我不喜歡看到重複的答案,但是當我發佈我的時候沒有答案,這顯然與@ jmo1687是一樣的。 – Ron

回答

1

這是我認爲你正在尋找的東西。我已經習慣了甲骨文,但希望它會爲其他口味以及工作:

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 
+0

非常感謝!這工作像一個魅力。我實際上是在Access 2007中設計這個數據庫,並且能夠通過一個小小的調整來完成這個工作 - 只需在你的選擇語句中加上「AS」即(從ScoreValues得到的選擇值,其中score = t.Throw1)AS Throw1Value – user2996675

+0

太棒了!我修改了答案,使它更獨立於平臺。 – jormaster3k

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