2014-03-06 2 views
1

위치를 나타 내기 위해 약 25 개의 열이있는 표가 있습니다.이 결과를 더 깨끗한 레이아웃으로 바꾸는 방법이 있다면 궁금합니다. 어떻게 내가 내 SQL에있는 것은의 라인을 따라입니다 : 이것은 나에게Transpose SQL Results

Face | Head | Eye | Finger - Left | .... | 
--------------------------------------------- 
    0 | 1 | 2 |  0  | ... | 

유사한 결과 데이터 집합을 제공

SELECT sum(isnull(p.[injuryFace],0)) AS [Face] 
    ,sum(isnull(p.[InjuryHead],0)) AS [Head] 
    ,sum(isnull(p.[InjuryEye],0)) AS [Eye] 
    ,sum(isnull(p.[InjuryLeftFinger],0)) AS [Finger - Left] 
    ,.... 
FROM tbl_OHS_IncidentsPeople P 

내가 결국하고 싶은 어떤 것이

Area   | Count | 
------------------------ 
Face   | 0 | 
Head   | 2 | 
Eye   | 3 | 
Finger - Left | 0 | 
입니다

아니, 내가 필요로하는 것 같아 보이는 Simple way to transpose columns and rows in Sql?을 보았다. 그러나 나는 전체 테이블을 조바꿈하고 싶지 않기 때문에 내 머리에서 그것을 이해할 수 없다.

어떤 도움을

건배 스티븐

+0

테이블은 부상에 있었다 그래서 더 정규화 인 경우 자신의 자식 테이블을 가지고 있고 기본적으로'(victimID, areaID)'를 가지고 있다면,이 쿼리는 단순한 조인/그룹 일 것입니다. 하지만 여러 컬럼을 가지고 있기 때문에 당신은 꼼짝 할 필요가 없습니다 ... sqlserver 또는 이와 유사한 경우 "unpivot"쿼리를 사용할 수 있습니다. 그렇지 않으면 클라이언트 측 코드에서 변환하는 것이 더 낫습니다. . –

+0

당신은'UNION's의 괴물 시리즈를 할 수 있습니다, 그렇죠? 'Area'로 선택 'Face', sum (...) tbl_OHS_IncidentsPeople에서 'Count'로 UNION SELECT 'Head'를 'Area', sum (...) ... '아이디어를 얻습니다. 일종의 못 생겼다고 생각하고 영향을 고려하기 위해'설명 계획 '을 점검 하겠지만, 당신이 설명하는 결과 세트를 얻는 것처럼 보입니다. –

+0

Marc B는 올바른 대답이 정규화라고 절대적으로 맞습니다. 그러나, 내 생각 엔 당신이 기존의 데이터베이스를 치고 있으며 앱을 사용하는 유일한 앱이 아니라는 것입니다. 그는 또한 클라이언트 측에서 수행하는 것이 거의 확실하게 가장 효율적일 것이라고 정확합니다. –

답변

2

한 가지 방법은 아래와 같이 조합하여 수를 분할하는 것입니다 좋은 것 :

select 'Face' as area, sum(isnull(p. [ injuryFace ], 0)) as location 
    from tbl_OHS_IncidentsPeople P 
union all 
select 'Head' as area, sum(isnull(p. [ InjuryHead ], 0)) 
    from tbl_OHS_IncidentsPeople P 
union all 
select 'Eye' as area, sum(isnull(p. [ InjuryEye ], 0)) 
    from tbl_OHS_IncidentsPeople P 
union all 
select 'Finger - Left' as area, sum(isnull(p. [ InjuryLeftFinger ], 0)) 
    from tbl_OHS_IncidentsPeople P 
+0

많은 분들께 고마워, 부상 위치에 대한 또 다른 테이블을 갖고, 인원 ID에 대한 열의 행과 각 부상 위치에 대한 열이있는 것이 좋습니다. 필요한 경우 응용 프로그램을 수정할 수있는 기능이있어서 더 쉽게 사용할 수 있습니다. 나는 각 열을 미래에 변화시키는 것을 피하도록 노력하고있다. – Stephen

+0

HITS (person_id, location_id, date_of_hit), LOCATIONS (location_id, location_name)에 대한 또 다른 테이블 및 PERSONS (person_id, person_name)에 대한 다른 테이블을 기록하는 하나의 테이블이 있습니다. 그런 다음 쿼리 할 때 HITS 테이블을 사용하고 LOCATIONS/PERSONS와 조인하여 각 사람과 위치의 이름을 가져옵니다. –

+0

감사합니다. 애플리케이션을 수정하여 위치를 seperate 테이블로 옮깁니다. 현재 나는 HITS와 PERSONS를 위해 하나씩 가지고 있지만 LOCATION도 이것에 추가 할 것입니다. "체크 박스"정보를 한 줄로 옮기는 방법을 찾아야합니다. – Stephen