2015-03-12 3 views
0

Я хочу получить значения отдельных столбцов из первых трех столбцов, а четвертый столбец содержит значения трех состояний i, e. 1,0, Нуль и значение четвертого столбца следует брать по указанному выше порядку.Получите отличные значения столбцов из первых трех столбцов и отдайте приоритет четвертому значению столбца SQL

для, например, если мои данные таблицы как

Initial Data

Desired Output

Где первые три столбца, группируют и четвертое значения столбцов приоритет отдаётся

Любая помощь будет оценена

ответ

2

Вам необходимо использовать MAX С GroupBY.

SELECT 
    Proj, 
    sponser, 
    Id, 
    Max(visible) AS MaxVisible 
FROM 
     tableName 
GROUP BY 
    Proj,Sponser,Id 
+0

Я чувствую себя настолько глупо, это было так просто, спасибо! –

+1

Рад, что это помогло. Счастливое кодирование! –

1

Попробуйте это,

SELECT Proj, 
     Sponsor, 
     ID, 
     Visible 
FROM (SELECT Proj, 
       Sponsor, 
       ID, 
       Visible, 
       Row_Number() 
       OVER(
        Partition BY PRoj, Sponsor, ID 
        ORDER BY Visible DESC) AS RN 
     FROM #Yourtable)A 
WHERE RN = 1 
+0

Спасибо за ваше время –

1

несколько способов, чтобы получить ожидаемый результат, ответить уже размещены правильно. Я просто хотел показать использование CTE, чтобы получить тот же результат.

НА ОСНОВЕ ВАШЕЙ Пример

Пожалуйста, найдите запросы, как показано ниже, чтобы получить требуемую мощность. Да CTE будет стоить меньше, чем вложенные запросы.

CREATE TABLE project (proj VARCHAR(5), Sponsor VARCHAR(5), ID INT, visible INT null) 

INSERT INTO project 
SELECT 'A', 'a', 123, NULL 
UNION 
SELECT 'A', 'a', 123, 1 
UNION 
SELECT 'A', 'a', 123, 0 
UNION 
SELECT 'B', 'b', 345, NULL 
UNION 
SELECT 'B', 'b', 345, 1 
UNION 
SELECT 'B', 'b', 345, 0 
UNION 
SELECT 'C', 'c', 567, 0 
UNION 
SELECT 'D', 'd', 897, 0 
UNION 
SELECT 'D', 'd', 897, 1 
UNION 
SELECT 'E', 'e', 765, NULL 


;WITH CTE AS 
(
SELECT proj, Sponsor,ID,visible, ROW_NUMBER() OVER (PARTITION BY proj ORDER BY visible DESC) AS Rank 
FROM project 
) 
SELECT proj, Sponsor,ID,visible 
FROM CTE 
WHERE Rank = 1 
+1

Спасибо, это тоже работает. –

Смежные вопросы