2

我有一张看起来像这样的桌子

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

感谢您的意见和建议!

4

1 回答 1

2

您的代码非常接近,但您尝试使用 asum()varchar不起作用。如果您将聚合函数更改为max()then 它应该可以工作:

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

请参阅带有演示的 SQL Fiddle

如果要将其创建为函数,则可以使用:

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

请参阅带有演示的 SQL Fiddle

结果是:

| OUTPUTTABLESID |    1 |    2 |    3 |   25 |
----------------------------------------------
|            236 | text | text | text | text |
于 2013-02-05T16:30:21.120 回答