2016-02-02 8 views
-1

Нужна помощь для одного запроса, который извлекает результат из нескольких строк на основе некоторого условия. Напр. у нас есть таблица с [Roll no] с [subject]. Таблица может иметь несколько записей для того же [Roll No]. Моим требованием является то, что Студент выбирает только «английский», тогда результат должен возвращать «E», если Maths тогда «M», и если оба тогда «B».Запрос для нескольких строк SQL Where where

+2

Что вы пробовали? Это довольно простой запрос агрегирования с условной логикой. –

+1

Добавить пример данных таблицы и ожидаемого результата. – jarlh

ответ

1

// Я думаю, что это то, что вы хотите.

INSERT INTO dbo.rolls 
    (name, subject) 
VALUES ('Jones', 'English'), 
('Smith', 'Math'), 
('Adams','English'), 
('Adams', 'Math') 
GO 

;WITH CTE AS (
SELECT subquery1.name, 'B' AS code FROM (
SELECT name,COUNT(name) AS cnt 
FROM rolls 
WHERE subject = 'English' OR subject = 'Math' 
GROUP BY name 
HAVING COUNT(name) > 1) AS subquery1 

UNION 

SELECT subquery2.name, SUBSTRING(rolls.subject,1,1) AS code FROM (
SELECT name,COUNT(name) AS cnt 
FROM rolls 
WHERE subject = 'English' OR subject = 'Math' 
GROUP BY name 
HAVING COUNT(name) = 1) AS subquery2 
INNER JOIN dbo.rolls 
ON rolls.name = subquery2.name 
) 

SELECT * FROM CTE