我想在没有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'
答案 0 :(得分: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
如果您希望所有值不仅仅是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;