내가 찾고있는 것은 같은 테이블의 여러 데이터를 그룹화하고 합계를 계산하여 서로 다른 두 열로 표시하는 것입니다. 아래처럼. 테이블에열의 값 계산
데이터
필드 : 쿼리
Name Type
Bob 1
John 2
Bob 1
Steve 1
John 1
Bob 2
원하는 결과 :
Name Type 1 Type 2
Bob 2 1
John 1 1
Steve 1 0
내가 찾고있는 것은 같은 테이블의 여러 데이터를 그룹화하고 합계를 계산하여 서로 다른 두 열로 표시하는 것입니다. 아래처럼. 테이블에열의 값 계산
데이터
필드 : 쿼리
Name Type
Bob 1
John 2
Bob 1
Steve 1
John 1
Bob 2
원하는 결과 :
Name Type 1 Type 2
Bob 2 1
John 1 1
Steve 1 0
이 SQL Server의 트릭을 할 것입니다 : 크로스 탭 솔루션을 찾고있는
SELECT
name,
SUM(CASE type WHEN 1 THEN 1 ELSE 0 END) AS type1,
SUM(CASE type WHEN 2 THEN 1 ELSE 0 END) AS type2
FROM
myTable
GROUP BY
name
@Seb이 좋은 해결책이 있지만 서버에 의존합니다. 다음은 대체 가능해야하는 보조 선택을 사용하는 것입니다.
select
name,
(select count(type) from myTable where type=1 and name=a.name) as type1,
(select count(type) from myTable where type=2 and name=a.name) as type2
from
myTable as a
group by
name
두 개의 별도 GROUP BY 하위 쿼리를 사용하십시오.
SELECT Name, a.Count1, b.Count2
from myTable
JOIN
(SELECT Name, SUM(Type) AS Count1 FROM myTable GROUP BY Name WHERE Type=1) AS a ON a.Name = myTable.Name
(SELECT Name, SUM(Type) FROM myTable GROUP BY Name WHERE Type=2) AS b ON b.Name = myTable.Name
코드를 작성할 시간이 없지만 여기서는 원하는 Case 문을 사용할 수 있습니다. 케이스를 만나는 경우에는 1을, 그렇지 않으면 0으로 만듭니다. 그런 다음 열을 합할 수 있습니다.
. 위의 솔루션은 효과가 있지만 일반 솔루션을 원하고 N 유형을 사용하면 문제가 없습니다.
크로스 탭 솔루션으로 해결할 수 있습니다. 일부 숫자를 빠르게 처리하려면 Excel로 데이터를 덤프하고 기본 피벗 테이블 기능을 사용하십시오.
앱의 RDBMS 인 경우 RDBMS에 따라 다릅니다. MS SQL 2005 이상에는 크로스 탭 구문이 있습니다. 참조 :
이궁, 나는 그가 RDMS에 따라 달라집니다 것 같아요; ANSI SQL로 수행 할 수 있는지 확실하지 않습니다. 어떤 DB입니까? –