Объединение записей в запросе - PullRequest
0 голосов
/ 25 апреля 2011

Мне нужно написать запрос, который ищет между 2 строками, но будет соответствовать только значению в обеих строках. Данные, которые я ищу, представляют собой таблицу, которая содержит имя и фамилию в виде отдельных строк. Не говорите мне, что я должен хранить их в одном ряду. Я не могу, и это все, что нужно сказать. Что мне нужно сделать, это запрос, который объединяет записи, чтобы я мог искать их в отдельных столбцах.

Формат данных следующий:

StudentValues
    ID
    StudentID
    FieldID
    Response

Fieldid 1 дает мне первое имя в столбце ответа, а fieldid 2 дает мне фамилию в столбце ответа, и 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

Ответы [ 5 ]

2 голосов
/ 25 апреля 2011

ОБНОВЛЕНО следующий комментарий

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'
1 голос
/ 25 апреля 2011

Задумывались ли вы об использовании PIVOT для FieldID? Это позволит вам использовать имя и фамилию (FieldID = 1, FieldID = 2) в одном запросе.

0 голосов
/ 25 апреля 2011

Объединение может сделать это:

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
0 голосов
/ 25 апреля 2011
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 голосов
/ 25 апреля 2011
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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...