2015-08-03 6 views
1

У меня есть простой дизайнSQL группы, не может найти правильную фразу

id | grpid | main 
----------------- 
1 | 1 | 1 
2 | 1 | 0 
3 | 1 | 0 
4 | 2 | 0 
5 | 2 | 1 
6 | 2 | 0 

Вопрос ответить в

What is the "id" of the main in each group? 

Результат должен быть

id 
--- 
1 
5 

серьезно на момент, я не могу ответить на него сам. Помогите мне.

+4

Если вы просто хотите id 'select id from t where main = 1'? –

+0

Чувак у абсолютно прав, я был настолько ослеплен из-за необходимости группировки, но это не обязательно. если бы вы могли опубликовать это как ответ, я бы принял его. Thx –

+2

Возможно, вы удалите этот вопрос –

ответ

0

Самый простой способ, которым Вы можете сделать это с помощью:

select id from <table_name> where main=1 

но, как вы упомянули вы хотите id с группой по grpid ниже запрос будет работать.

select id from <table_name> group by grpid, main having main = 1 

Вы должны применить group by на вашу идентификатор группы и на основе этого проверьте значение основного, как 1. Вы получите желаемый результат.

+0

Это не поможет. Ошибка: Столбец «table.main» недействителен в предложении HAVING, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. –

+0

добавить это в группу 'group by grpid, main' –

2

Может быть, я упрощаю его здесь, но не могли бы вы сделать это:

select id, 
     grpid 
    from table 
where main = 1; 
0

Если вы хотите добавить колонку для ее соответствующей «MainId», то вы можете сделать это возможно?

SELECT f.id, f.grpid, f.main, t.MainId 
FROM foo f 
CROSS APPLY (
    SELECT grpid, id AS MainId 
    FROM foo f1 
    WHERE main = 1 
     AND f.grpid = f1.grpid) t 
Смежные вопросы