[SQL] 열 값으로 행 값을 만들기 - SQL PIVOT
SQL열 값으로 행 값을 만들기 - SQL PIVOT
SQL은 테이블에서 다음과 같은 결과를 반환 CowTracking를
ID cow_id barn_id
-- ------ -------
19 5 3
20 5 2
21 5 9
22 5 1
나는 SQL에서 PIVOT과 함께 다음과 같은 결과를 얻기 위해 노력하고 있어요
cow_id barn1 barn2 barn3 barn4
------ ----- ----- ----- -----
5 3 2 9 1
이것은 내가 지금까지 가지고있는 코드입니다.
SELECT *
FROM
(
SELECT TOP 4 *
FROM CowTracking
WHERE cow_id = 5
) AS DataTable
PIVOT
(
MIN(barn_id) **IDK what function to use and which column to use it on**
FOR ID ??<---**NOT SURE**
IN
(
[barn1], [barn2], [barn3], [barn4]
)
) AS PivotTable
ERRORS: Error converting data type nvarchar to int
The incorrect value "barn1" is supplied in the PIVOT operator
참고 : barn_id은 VARCHAR입니다. 이 데이터 유형을 변경 할 수 없습니다.
나는 / 곱하기 / 집계 또는 무엇이든을 추가하려고하고 있지 않다. 단순히 열에 행을 이동하는 것을 시도하고있다
나는이 일에 대해 어떻게 갈 것인가? 이 올바른 생각 과정인가?
난 PIVOT을 사용해야합니까?
해결법
-
==============================
1.당신의 테이블에는 barn1..4이 없기 때문에, 당신은 어떻게 든 자신의 해당 축사와 ID의를 교체해야합니다.
당신의 테이블에는 barn1..4이 없기 때문에, 당신은 어떻게 든 자신의 해당 축사와 ID의를 교체해야합니다.
PIVOT을 사용하여 하나 개의 솔루션은 다음과 같이 수 있습니다
SELECT cow_id , [19] as [barn1] , [20] as [barn2] , [21] as [barn3] , [22] as [barn4] FROM ( SELECT * FROM DataTable PIVOT ( MIN(barn_id) FOR ID IN ([19], [20], [21], [22]) ) AS PivotTable ) q
다른 솔루션을 사용하여 CASE 및 GROUP BY가 될 수있다
SELECT cow_id , [barn1] = SUM(CASE WHEN ID = 19 THEN barn_id END) , [barn2] = SUM(CASE WHEN ID = 20 THEN barn_id END) , [barn3] = SUM(CASE WHEN ID = 21 THEN barn_id END) , [barn4] = SUM(CASE WHEN ID = 22 THEN barn_id END) FROM DataTable GROUP BY cow_id
그러나 본질적으로,이 모든 헛간에 ID를 하드 코딩으로 요약된다.
편집하다
당신은 항상 기록의 고정 수를 반환하고, SQL Server를 사용하는 경우이 좀 더 강력한으로 만들 수도 있습니다
SQL 문
SELECT cow_id , [barn1] = SUM(CASE WHEN rn = 1 THEN barn_id END) , [barn2] = SUM(CASE WHEN rn = 2 THEN barn_id END) , [barn3] = SUM(CASE WHEN rn = 3 THEN barn_id END) , [barn4] = SUM(CASE WHEN rn = 4 THEN barn_id END) FROM ( SELECT cow_id , rn = ROW_NUMBER() OVER (ORDER BY ID) , barn_id FROM DataTable ) q GROUP BY cow_id
테스트 스크립트
;WITH DataTable (ID, cow_id, barn_id) AS ( SELECT * FROM (VALUES (19, 5, 3) , (20, 5, 2) , (21, 5, 9) , (22, 5, 1) ) AS q (a, b, c) ) SELECT cow_id , [barn1] = SUM(CASE WHEN rn = 1 THEN barn_id END) , [barn2] = SUM(CASE WHEN rn = 2 THEN barn_id END) , [barn3] = SUM(CASE WHEN rn = 3 THEN barn_id END) , [barn4] = SUM(CASE WHEN rn = 4 THEN barn_id END) FROM ( SELECT cow_id , rn = ROW_NUMBER() OVER (ORDER BY ID) , barn_id FROM DataTable ) q GROUP BY cow_id
from https://stackoverflow.com/questions/9117955/making-row-values-into-column-values-sql-pivot by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SSIS에서 여러 열로 쉼표 구분 기호와 데이터의 단일 열을 분할 (0) | 2020.07.15 |
---|---|
[SQL] SQL 서버 JDBC와 "NoClassDefFoundError를 모두 javax / XML / 바인드 / DatatypeConverter" (0) | 2020.07.14 |
[SQL] SQL을 사용하여 고유 한 난수를 생성 (0) | 2020.07.14 |
[SQL] PHP도 INI 값을 설정 한 후, MSSQL BLOB 데이터 (4096b)를 절단한다. 나는 하나의 실종? (0) | 2020.07.14 |
[SQL] 예외 java.sql.SQLException의 (0, 1> 파라미터의 수)의 범위 중 정수 인덱스 [중복] (0) | 2020.07.14 |