2017-05-12 2 views
0

한 응용 프로그램에서 Id, Name 및 Count라는 세 개의 필드가있는 테이블이 있습니다.SQL 쿼리에서 목록을 얻는 방법

Id | Name | Value 
1 | A |  5 
2 | B |  9  
3 | C |  9 
4 | D |  5 
5 | E |  6 
6 | F |  6 

이제 어떻게 위에서 크로스 테이블을 얻을 수 있습니까? 내 말은 다음과 같습니다 :

Value | Count 
---- | ---- 
5  | 2 
6  | 2 
7  | 0 
8  | 0 
9  | 2 

도와 주시겠습니까?

+2

지금까지 무엇을하려고 했습니까? – Donnie

+0

필드 값에 대한 기존 값을 얻을 수 있지만 그 사이에 모든 값을 채우는 방법을 알지 못합니다 ... 다음 ... 아무 아이디어도 계산할 수 없습니다 ... –

+0

값 7과 8은 어디에서 오는 것입니까? 또한 사용중인 데이터베이스에 질문을 태그하십시오. –

답변

1

먼저 집계 테이블을 만들어야합니다. 그게 many methods입니다. 집계 테이블을 사용하여 소스 테이블의 최소와 최대 사이의 모든 값에 번호를 매기십시오. 분과 최대 사이의 모든 숫자를 얻었 으면 LEFT JOIN 테이블의 버전에 COUNT()GROUP BY을 사용하여 각 값이 나타나는 횟수를 합한 숫자로 변환해야합니다.

이하의 표 A는 탈리 테이블이다. 표 B는 집계 된 소스 테이블입니다.

DECLARE @MinValue INT 
DECLARE @MaxValue INT 
SET @MinValue = (SELECT MIN(Value) FROM dbo.MyTable) 
SET @MaxValue = (SELECT MAX(Value) FROM dbo.MyTable) 

SELECT number as Value, COALESCE(Count,0) AS Count 
FROM (
    SELECT DISTINCT number 
    FROM master..spt_values 
    WHERE number 
    BETWEEN @MinValue AND @MaxValue 
) AS A 
LEFT JOIN (
    SELECT Value, COUNT(Value) AS Count 
    FROM dbo.MyTable 
    GROUP BY Value 
) AS B 
ON A.number = B.value 
+0

테이블을 만드는 가장 좋은 방법은 지정되지 않은 rdbms에 따라 크게 다릅니다. – Donnie

관련 문제