2012-06-27 5 views
1

나는 SQL 집계 함수없이 pivoting을하고 싶다. '최대'집계 함수가 사용되었지만 집계 함수를 제거하면 구문 오류가 표시됩니다. 'max'집계 함수를 사용하면 문자열 값 중 가장 큰 문자열 만 표시되고 'min'집계 함수가 사용되면 문자열 중 최소 문자열 값이 표시됩니다. 최소값과 최대 값 모두 필요하며 'FieldSubValues'의 모든 문자열 값이 필요합니다.집계 함수를 사용하지 않고 피벗을 수행하려면 어떻게해야합니까?

집계 함수를 사용하지 않고 피벗을 수행해야합니다. 누구든지 나를 도와 줄 수 있어요.

SELECT * 
FROM 
(
    SELECT FieldSubName,FieldSubValues 
    FROM FormFieldValue where FieldID=182 
)as p  
PIVOT 
( 
    min(FieldSubValues) 
    FOR FieldSubName IN ([Name],[Gender],[Days],[Message]) 
) AS pvt 

여기에 내가 '테스트'와 '메시지'값 즉 모두를 원하는 'fsdfds'둘 다 Min()Max() 문자열 값이 필요한 경우 enter image description here

+0

를 참조하십시오 : 최대 및 최소 단지를 - 행 번호를 추가하여 당신은 당신이 여러 행을 선회 할 수 있도록 할 것 필드 이름을 통해 데이터를 분할 할 수 말이 되네. 한 행의 단일 열에는 * (*) 이상의 값을 가질 수 없습니다. –

+0

예상되는 쿼리 결과를 게시하십시오. – Taryn

+0

FieldSubName 열 값과 'FieldSubValues'열의 모든 필드 값을 피벗 된 열, 즉 이름, 성별, 요일 및 메시지로 피벗시키고 싶습니다. 피벗 된 'FieldSubName'열 값에는 최소값과 최대 값뿐만 아니라 'FieldSubValues'열의 모든 값이 포함되어야합니다. – Power

답변

2

, 당신은 단지 UNIONPIVOT에를 두 번 사용할 수 있습니다.

select * 
from 
(
    select FieldSubName, FieldSubValues 
    from FormFieldValue 
) x 
PIVOT 
(
    min(FieldSubValues) 
    for FieldSubName IN ([Name], [Gender], [Days], [Message]) 
) p 
UNION 
select * 
from 
(
    select FieldSubName, FieldSubValues 
    from FormFieldValue 
) x 
PIVOT 
(
    max(FieldSubValues) 
    for FieldSubName IN ([Name], [Gender], [Days], [Message]) 
) p 

SQL Fiddle with Demo을 참조하십시오.

max/min 값뿐만 아니라 모든 값을 원하면 row_number()을 하위 쿼리에 추가 할 수 있습니다. 당신은 무엇을 요구하는지 것은하지 않습니다

select [Name], [Gender], [Days], [Message] 
from 
(
    select FieldSubName, FieldSubValues, 
    row_number() over(partition by FieldName order by FieldId) seq 
    from FormFieldValue 
) x 
PIVOT 
(
    max(FieldSubValues) 
    for FieldSubName IN ([Name], [Gender], [Days], [Message]) 
) p; 

SQL Fiddle with Demo

+0

위의 'union'은 최소값과 최대 값을 모두 제공하지만 최소값과 최대 값 이외의 모든 값을 원할 경우 어떻게해야합니까? , 그리고 그것을하는 방법 – Power

관련 문제