2012-02-20 5 views
2

Я работаю над простыми запросами, но не могу понять, как изменить, чтобы получить результат ниже.Условный результат запроса на основе столбца

Number Name Flag 
    1  ABC NULL 
    1  DEF FG 
    1  DEF NULL 

Мне нужно, чтобы произвести этот вывод:

Number Name Flag 
    1  ABC NULL 
    1  DEF FG 

Логика когда номер и имя же, взять строки с флагом.

+3

Что произойдет, если у вас есть еще один ряд, содержащий '1 DEF GH'? –

ответ

0

Может быть что-то вроде этого:

Сначала некоторые тестовые данные:

DECLARE @tbl TABLE(Number INT,Name VARCHAR(10),Flag VARCHAR(3)) 

INSERT INTO @tbl 
VALUES 
    (1,'ABC',NULL), 
    (1,'DEF','FG'), 
    (1,'DEF',NULL) 

запрос, как это:

;WITH CTE AS 
(
    SELECT 
     RANK() OVER(PARTITION BY Name ORDER BY Flag DESC) AS iRank, 
     tbl.Number, 
     tbl.Name, 
     tbl.Flag 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.iRank=1 
+0

Отлично !!! Это сработало лучше всего для сценария, я искал .. Спасибо !!!! – user1141584

+0

Рад помочь .. Счастливое кодирование: P – Arion

2

Простой способ, но я не знаю, соответствует ли это вашим требованиям, если имеется более одного значения, отличного от NULL.

SELECT Number, Name, Flag = MAX(Flag) 
    FROM dbo.Table 
    GROUP BY Number, Name; 
Смежные вопросы