2012-06-27 62 views
1

我想做沒有sql聚合函數的pivoting。 這裏'最大'聚合函數已被使用,但是當我刪除聚合函數然後顯示語法錯誤。當我使用'max'聚合函數時,只顯示字符串值中最大的字符串,當使用'min'聚合函數時,顯示字符串中最小的字符串值。我需要最小和最大值,來自'FieldSubValues'的所有字符串值。我們如何在不使用集合函數的情況下做pivoting?

我需要做pivoting而不使用聚合函數。誰能幫我。

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」 enter image description here

+0

什麼你問的不合理。在一行的單個列中不能有*兩個*(或更多)值。 –

+0

請發佈預期的查詢結果。 – Taryn

+0

我想將FieldSubName列值和'FieldSubValues'列的所有字段值轉到各自的樞軸列,即名稱,性別,天數和消息。可旋轉的'FieldSubName'列值必須包含'FieldSubValues'列的所有值,不僅最小值和最大值 – Power

回答

2

如果同時需要Min()Max()字符串值,你可以只使用一個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

相關問題