2011-04-25 187 views
0

我必須編寫一個查詢,在兩行之間進行搜索,但只會匹配兩行中的值。我搜索的數據是一張表,其中包含名字和姓氏是分開的行。不要告訴我,我應該把它們放在同一排。我不能,這就是所有需要說的。我需要做的是有一個查詢結合記錄,以便我可以在單獨的列中搜索它們。在查詢中合併記錄

的數據格式如下所示:

StudentValues 
    ID 
    StudentID 
    FieldID 
    Response 

的1甲fieldid給我的名字在響應柱和2 fieldid給我的姓在響應列和StudentID將用於將記錄分組。

我已經能夠構建以下SQL但where子句現在失敗

SELECT StudentId, MIN(CASE WHEN FieldId = 1 THEN Response ELSE NULL END) AS fname, MIN(CASE WHEN FieldId = 2 THEN Response ELSE NULL END) AS lname 
    FROM sms_studentvalues 
    WHERE fname = 'Some Value' 
     AND lname = 'Some Value' 
    GROUP BY studentid 

回答

2

修訂如下評論

SELECT * 
FROM (
    SELECT StudentId, 
      MIN(CASE WHEN FieldId = 1 THEN Response ELSE NULL END) AS Name, 
      MIN(CASE WHEN FieldId = 2 THEN Response ELSE NULL END) AS LastName 
    FROM YourTable 
    GROUP BY StudentId) AS StudentsNames 
WHERE Name = 'Some Value' AND LastName = 'Some Value' 
+0

我是遠遠超過了複雜的事情。我應該記住分組和套管可以是多麼有用。 – 2011-04-25 17:45:37

+0

在將此標記爲正確答案之前,我如何在查詢中添加where子句?上面的附加代碼。 – 2011-04-25 17:50:48

+0

@Dave Long - 更新了我的答案 – Lamak 2011-04-25 17:56:04

1

你有沒有想過使用的FieldID樞軸?這將允許您在同一個查詢中同時提取First和Last名稱(FieldID = 1,FieldID = 2)。

0
SELECT * 
FROM StudentValues s1 JOIN StudentValues s2 ON 
    s1.StudentID = s2.StudentID 
WHERE 
    s1.FieldID = 1 AND s1.Response = 'Larry' AND 
    s2.FieldID = 2 AND s2.Response = 'Ellison' 
0
SELECT a.ID, a.StudentID, a.Response, b.Response 
FROM StudentValues a 
INNER JOIN StudentValues B ON a.ID=b.ID and b.FieldID=2 
WHERE a.FieldID=1 
0

聯接可以這樣做:

SELECT 
    svf.Response AS FirstName, 
    svl.Response AS LastName 
FROM StudentValues svf 
    INNER JOIN StudentValues svl ON svf.StudentID = svl.StudentID 
     AND svl.FieldID = 2 
WHERE svf.FieldID = 1