我有一张看起来像这样的表
OutputTablesID Label ColumnOrder
236 text 1
236 text 2
236 text 3
. . .
. . .
. . .
236 text 25
我需要表格看起来像这样
OutputTablesID 1>>2>>3>>4>>5>>6>>7>>8>>9>>10>>11>>12>>13>>14>>15
236>>>>>>>>>Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text
我尝试过从现有的数据透视表中使用的代码,但我不能在聚合函数中使用Label,因为它是一个文本字符串。
这是我在数据透视表中的尝试
Create FUNCTION [dbo].[ColOrder]
(
)
RETURNS TABLE
AS
RETURN
(
SELECT OutputTablesId, Label, 1,2,3,4,5,6,7,8,9,10,11,12
from
(
SELECT OCL.Label, OCL.OutputTablesId
FROM OCL
) AS D
PIVOT
(
sum(Label)
FOR ColumnOrder IN ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) AS P
感谢您的意见和建议!
答案 0 :(得分:2)
您的代码非常接近,但您尝试在sum()
上使用varchar
无效。如果您将聚合函数更改为max()
,那么它应该可以工作:
select OutputTablesID, [1], [2], [3], [25]
from
(
select OutputTablesID, Label, ColumnOrder
from yourtable
) src
pivot
(
max(label)
for ColumnOrder in ([1], [2], [3], [25]) -- put other ColumnOrder values here
) piv
如果要将其创建为函数,则可以使用:
create function dbo.colorder()
returns table
as
return
select OutputTablesID, [1], [2], [3], [25]
from
(
select OutputTablesID, Label, ColumnOrder
from yourtable
) src
pivot
(
max(label)
for ColumnOrder in ([1], [2], [3], [25]) -- put other ColumnOrder values here
) piv
结果是:
| OUTPUTTABLESID | 1 | 2 | 3 | 25 |
----------------------------------------------
| 236 | text | text | text | text |