2014-06-17 1 views
0

테이블 하나가 있으며 테이블의 한 열씩 그룹화하고자 함 계약. 그러나 그룹별로 시도 할 때 각각의 행 하나만 반환하면 Sqlfillder를 확인하십시오.그룹 반환 방법 각 행에 대해 하나의 행

쿼리는 다음과 같습니다 Select * from employees group by contract

SqlFillder

+0

예상 한 내용을 추가해 주실 수 있습니까? SqlFillder에서 두 개의 행이 있습니다. 그게 내가 기대했던 것. – Jens

+3

group by clause에서 무엇을 기대합니까? –

+0

그룹 별 절을 사용하여 원하는 것은 단지 우리가 당신을 도울 수 있다고 말합니다. – Sadikhasan

답변

-2
Declare @employees table (
    id int not null, 
    name char(30) not null, 
    [contract] char(30) not null, 
    PRIMARY KEY (id) 
); 



insert into @employees (id, name, [contract]) 
values 
(1, 'John', 'full-time'), 
(2, 'Mike', 'full-time'), 
(3, 'Alex', 'part-time'), 
(4, 'Jerry', 'part-time'); 

Select e.id,e.name,e.[contract] from @employees e group by e.id,e.name,e.contract 
+1

쿼리와 SELECT * FROM @EMPLOYEES의 차이점은 무엇입니까? : 위의 질문에서 –

+0

은 계약이 정의 된 키워드이므로 예상 결과를 얻을 수 없으며 열 이름으로 가져올 수 없습니다. 따라서이 항목을 [계약]에서 언급 했으므로 그룹에서 열을 나열해야합니다. – mohan111

+0

Nishanthi 그래 시아 말이 맞아. 당신의 질문은 말이되지 않습니다. 직원에게서 *를 선택하기 만하면됩니다. group by 절은 불필요하며 혼란 스럽습니다. 게다가 당신의 대답은 실제로 아무 것도 대답하지 않습니다. –

-1

그것은 * 그룹에 오히려 무의미하지만, 선택합니다.

계약에 따라 그룹화됩니다. 따라서 계약 당 한 줄을 얻을 수 있습니다. 그런 다음 계약 옆에있는 모든 열과 ID 및 이름을 원하게됩니다. 계약 당 볼 ID와 이름을 지정하지 않으므로 무작위 매치가 발생합니다.

선택하는 각 열에 대해 (귀하의 예에서는 계약으로) 그룹화하거나 집계 (MIN, MAX 등)하도록 지정하는 것이 좋습니다.

Select contract, GROUP_CONCAT(name), id from employees group by contract; 

계약은 다음에 의해 그룹화됩니다. 이름은이 예에서 집계됩니다. 그렇게 될 것입니다. 그러나 id는 그룹화되지도 않고 예제에서도 집계되지 않습니다. 그래서 규칙에 따라 id를 그룹화 할 것인지를 결정하십시오 (id 당 한 줄을 얻으 려면 여기에 아무런 의미가 없습니다. 이는 테이블의 모든 레코드가 될 것이기 때문에) 또는 집계됩니다 (예 : MIN (id)). 또는 전혀 선택되지 않았습니다.

관련 문제