2014-02-28 1 views
0

다음과 같은 표가 있다고 가정하면 작업 번호와 작업 센터별로 주간 열을 어떻게 요약 할 수 있습니까? 에동일한 ID/작업 번호로 열을 정리하십시오.

+-----------+------------+---------------+--------+----------------- 
| Job  | Work_Date | Work_Center | Budget |  Weekly | 
+-----------+------------+---------------+--------+------+---------- 
|  5666 | 2014-02-23 | SURFACE  |  155 |  5  | 
|  5666 | 2014-02-23 | SURFACE  |  155 |  3  |  
|  5666 | 2014-02-23 | DESIGN  |  200 |  6  |     
+-----------+------------+---------------+----------+--------------+ 

전원을 켜고 그것을 :

+-----------+------------+---------------+--------+----------------- 
| Job  | Work_Date | Work_Center | Budget |  Weekly | 
+-----------+------------+---------------+--------+------+---------- 
|  5666 | 2014-02-23 | SURFACE  |  155 |  8  |  
|  5666 | 2014-02-23 | DESIGN  |  200 |  6  |     
+-----------+------------+---------------+----------+--------------+ 

편집

좋아 주간 완벽하게 작동합니다! 그러나 내가 겪었던 문제는 예산의 합계를 구할 때입니다. 일반적으로 각 Work_Center의 예산은 특정 Job AFAIK에 대해 동일하게 유지됩니다. 그러나 누락 된 부분이 하나 있습니다. 예를 들어 Job 5666의 예산을 내 Crystal Report에서 155 대신에 172를 사용하여 예산에 숫자가 추가되었습니다. 따라서 나는 더 많은 파고를하고 첫 번째와 같이 중복 된 예산을 추가하지 않습니다. 테이블,하지만 중복되지 않을 경우 가치에 추가됩니다 (내 이해에서).

그래서이 행을 발견했습니다.

+-----------+------------+---------------+--------+----------------- 
| Job  | Work_Date | Work_Center | Budget |  Weekly | 
+-----------+------------+---------------+--------+------+---------- 
| 5666-8 | NULL  | SURFACE  |  17 |  0  |      
+-----------+------------+---------------+----------+--------------+ 

이제이 값을 예산에 추가하려면 아래 제공된 SQL 응답을 시도 할 때 작동하지 않습니다. 저는 Job #을 다듬어 보았습니다. # 5666이 Job #s에서 일치하는 것을 볼 수 있었고, 예산을 합산 할 수는 있었지만 그렇게되지는 않았습니다.

제 설명이 약간 명확 해지기를 바랍니다.

+0

그런 다음 예산 열 합계하지 하시겠습니까? 나는 그것이 여러분이 표준'GROUP BY'를 사용하지 않고있는 이유라고 생각합니다. – chucknelson

+0

@chucknelson 예산이 매주 바뀌지 않기 때문에 나는 원하지 않습니다. 따라서 예산이 두 주 동안 동일 할 경우 합계하지 않아야합니다. – MikeOscarEcho

답변

2

그냥 그룹 결과와는 Weekly 열 합계 :

SELECT Job, Work_Date, Work_Center, Budget, SUM(Weekly) 
FROM your_table 
GROUP BY Work_Center, Job; 
+0

그래도 작동하지만 GROUP BY에 Work_Date를 포함해야합니다. 오류가 발생했습니다 : 'view_surfacing_report.Work_Date'열이 집계 함수 또는 GROUP BY 절에 포함되어 있지 않기 때문에 선택 목록에서 올바르지 않습니다. – MikeOscarEcho

2
SELECT Job, Work_Date, Work_Center, Budget, SUM(Weekly) FROM your_table GROUP BY Work_Center, Job 
1

다른 답변 예산 일부가 누락되었습니다.

SELECT Job, Work_Date, Work_Center, avg(Budget), SUM(Weekly) 
FROM your_table 
GROUP BY Work_Center, Job; 

참고 : SQL_STRICT 모드에서 작업하는 경우 work_date가 그룹에 없기 때문에이 쿼리가 실패합니다. 이를 염두에두고 Work_Date는 각 주문마다 다를 수 있기 때문에 반환 할 날짜에 신뢰할 수 없으므로 쿼리에서 제외하는 것이 가장 좋습니다.

1

작업 및 Work_Center로만 그룹화하려는 경우 Work_Date가 적합하지 않은 것으로 보이고 의견에서 예산과 관련이없는 것 같습니다.

SELECT Job, Work_Center, SUM(Weekly) 
FROM your_table 
GROUP BY Work_Center, Job 
+0

글쎄, 나는 예산에 관심을 가져야한다. 예산 보고서에 Crystal Report의 가치가 더해졌습니다. 내 식탁에서 그걸 모방하는 방법을 모르겠다. 예를 들어 예산이 155 인 경우 수정에서 5666에 대한 출력은 172이고 그 결과로 17에서 155가 추가됩니다.이 필드는 Work_Date 값 (NULL). Budget에 추가 할 가치를 얻는 방법에 대해 확신하지 못합니다. – MikeOscarEcho

+0

예산 합산을 원하십니까? 그렇다면 SUM (예산)을 반환 할 열에 추가하면됩니다. SUM은 집계이므로 그룹에 포함시키지 않아도됩니다. 당신이 찾고있는 것을 얻을 수 있도록 도와 드리겠습니다. 나는 확실히 이해하고 있는지 잘 모르겠다. – raholling

+0

그래, 내 설명이 도움이되지 않는다는 것을 이해합니다. 위의 게시물을 편집하여 내 뜻을 알려줍니다. SUM을 추가하는 것이 예산을 추가하는 방법을 알 수 있지만, 동일한 예산 (155)이 여러 번 복사되기 때문에 엄청난 숫자를 얻을 수 있습니다. 내 게시물을 봐, 내가 무슨 뜻인지 알게 될거야. – MikeOscarEcho

2

처럼 리치 해치가 데이터베이스가 Work_Date 반환 할 알고하지 않기 때문에, Work_Date가 쿼리에 포함 할 수 없습니다 언급하고있다 (이론적으로있을 수 다른 작업 날짜 :

당신이 가까이 뭔가를 원하는 동일한 직업 및 근로 센터를 위해). 또는 1) 작업 날짜 열에 따라 그룹화하거나 2) 작업 일과 동일한 MAX (작업 날짜)를 선택할 수 있습니다. 그래서, 당신은 당신의 편집에 대응

SELECT Job, Max(Work_Date) as Work_Date, Work_Center, MAX(Budget) as Budget, SUM(Weekly) 
FROM your_table 
GROUP BY Work_Center, Job; 

Related Question on SO

  • 편집

을 쓸 수 있습니다, 나는 다음과 같은 수정 된 쿼리를 제안한다.고유 한 예산 값만 추가 할 수 있습니다.

SQL 서버

SELECT LEFT(Job, CHARINDEX(Job, "-")-1) as Job, Max(Work_Date) as Work_Date, Work_Center, SUM(DISTINCT Budget) as Budget, SUM(Weekly) as Weekly 
FROM your_table 
GROUP BY Work_Center, LEFT(Job, CHARINDEX(Job, "-")-1); 

오라클

SELECT SUBSTR(Job, 1, INSTR(Job, "-")-1) as Job, Max(Work_Date) as Work_Date, Work_Center, SUM(DISTINCT Budget) as Budget, SUM(Weekly) as Weekly 
FROM your_table 
GROUP BY Work_Center, SUBSTR(Job, 1, INSTR(Job, "-")-1); 
관련 문제