2

我想在没有 sql 聚合函数的情况下进行旋转。这里使用了“max”聚合函数,但是当我删除聚合函数时,会显示语法错误。当我使用“max”聚合函数时,只显示字符串值中最大的字符串,当使用“min”聚合函数时,显示字符串中的最小字符串值。我需要 minimum 和 maximum ,来自“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” 在此处输入图像描述

4

1 回答 1

2

如果您需要两者Min()Max()字符串值,您可以只使用UNION两次PIVOT

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值,那么您可以将 a 添加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

于 2012-06-27T13:11:35.370 回答