2013-02-18 2 views
1

У меня есть вид сетки, и он имеет тип один и тип два столбца, который связывается с type1 и type2.Как написать команду SQL 'case'?

Затем я добавляю к нему щечную коробку.

Я хочу связать данные, но мои данные запроса дублируются.

Это мой запрос

SELECT DISTINCT 
    userId, 
    MAX(CASE WHEN ApproverTypeID = 1 THEN ApproverTypeID END) AS Type1, 
    MAX(CASE WHEN ApproverTypeID = 2 THEN ApproverTypeID END) AS Type2 
FROM   
    table1 
GROUP BY 
    ApproverTypeID, userId 

Моя исходная таблица выглядит следующим образом ..

Name  Type 
--------- 
    Name1  1 
    Name2  1 
    Name1  0 

Но я хочу, чтобы получить выход, как это ...

Name  Type1 Type2 
---------------- 
    Name1 1  0 
    Name2 1  null 

Как может Я делаю это?

+0

Ваш вопрос недостаточно ясен. Пожалуйста, объясните, что вы хотите в своем выпуске. – Rachcha

+1

Какая СУБД вы используете? – pyrospade

+1

Вам не нужно DISTINCT, когда вы используете GROUP BY. –

ответ

0

Вы просто нужно удалить ApproverTypeID из предложения GROUP BY, потому что ApproverTypeID используется в функции MAX(). После этого вы также можете удалить чрезмерное предложение DISTINCT. И вы получите то, что хотите

SELECT userId, 
     MAX(CASE WHEN ApproverTypeID = 1 THEN ApproverTypeID END) AS Type1, 
     MAX(CASE WHEN ApproverTypeID = 2 THEN ApproverTypeID END) AS Type2 
FROM table1 
GROUP BY userId 
1

, так как вы не упомянули сервер базы данных, которую вы используете, запрос ниже будет работать практически на всех СУБД (, но не все)

SELECT Name, 
     MAX(CASE WHEN Type = 1 THEN Type END) Type1, 
     MAX(CASE WHEN Type = 2 THEN Type END) Type2 
FROM tableName 
GROUP By Name 
Смежные вопросы