如何在不使用聚合函数的情况下进行旋转?

时间:2012-06-27 12:34:48

标签: sql sql-server-2008 pivot

我想在没有sql聚合函数的情况下进行透视。 这里使用了'max'聚合函数,但是当我删除聚合函数时,会显示语法错误。当我使用'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

这里我想要'消息'值,即'Testing'和'fsdfds' enter image description here

1 个答案:

答案 0 :(得分: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()。通过添加行号,您可以在FieldName上对数据进行分区,从而允许您转动多行 - 而不仅仅是最大值和最小值:

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