2014-04-23 5 views
1

이 작업을 수행하는 더 좋은 방법이 있어야합니다. 이 하나 개의 테이블이고 나는 서로의 상단에있는 모든 열 하나를 선택해야 할 8 열이 각각 선정 콜 럼에 대해 내가 같은동일한 테이블에있는 모든 유니언

SELECT Col1, count(*) 'Selected' 
FROM [Table] 
group by temp_id,Col1 
UNION ALL 
SELECT Col2,count(*) 
FROM [Table] 
group by temp_id,Col2 
having len(ltrim(rtrim(Col2)))<>0 
UNION ALL 
SELECT Col3,count(*) 
FROM [Table] 
group by temp_id,Col3 
having len(ltrim(rtrim(Col3)))<>0 
union all 
SELECT Col4,count(*) 
FROM [Table] 
group by temp_id,Col4 
union all 
SELECT Col5,count(*) 
FROM [Table] 
group by temp_id,Col5 
having len(ltrim(rtrim(Col5)))<>0 
union all 
SELECT Col6,count(*) 
FROM [Table] 
group by temp_id,Col6 
having len(ltrim(rtrim(Col6)))<>0 
union all 
SELECT Col7,count(*) 
FROM [Table] 
group by temp_id,Col7 
having len(ltrim(rtrim(Col7)))<>0 
union all 
SELECT Col8,count(*) 
FROM [Table] 
group by temp_id,Col8 
having len(ltrim(rtrim(Col8)))<>0 
+4

달성하려는 시도가 명확하지 않기 때문에 더 좋은 방법이 있다면 말하기가 어렵습니다. –

+0

당신은 무엇을하려고합니까? 테이블 이름 지정 [테이블]은 "col"등의 열과 마찬가지로 열악한 디자인입니다. 또한 temp_id가 절대로 선택 목록에 포함되지 않았지만이 테이블을 통해 집계하는 방법은 확실하지 않습니다. – pinkfloydx33

+0

질문 구조 테이블, 샘플 데이터 및 원하는 결과를 추가하십시오. –

답변

1

가있는 항목의 수를 계산해야합니다. 그룹화 집합이라고합니다 (문서 번호 : here). 귀하의 경우에는, 당신은 (처음 세 개의 열 예를 들어)이 같은 작업을 수행 할 수 있습니다 귀하의 조건이 각 열 length()trim()를 사용하여

select coalesce(col1, col2, col3), count(*) as Selected 
from [table] 
group by grouping sets ((temp_id, col1), (temp_id, col2), (temp_id, col3)); 

- 당신은 아마 having 절을 사용하는 것이 처리해야합니다.

+0

대단히 감사합니다 질문을 이해하지 못하고 마킹을하기 전에 문제를 살펴 보는 것입니다. – user2615302

+1

누군가 다른 사람이 이것을 본다면 2008 년 이상에서만 작동합니다 – user2615302

관련 문제