我想在没有 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
这里我想要“消息”值,即“测试”和“fsdfds”
最佳答案
如果您同时需要 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
如果您想要所有值而不仅仅是 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 - 我们如何在不使用聚合函数的情况下进行透视?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11226341/