select id=identity(int,1,1) , monthvalue into temp from tb
select Jan = t1.monthvalue,
       Feb = t2.monthvalue,
       Mar = t3.monthvalue,
       Apr = t4.monthvalue,
       May = t5.monthvalue,
       Jun = t6.monthvalue,
       Jul = t7.monthvalue,
       Aug = t8.monthvalue,
       Sep = t9.monthvalue,
       Oct = t10.monthvalue,
       Nov = t11.monthvalue,
       Dec = t12.monthvalue
from
(select monthvalue from temp where id = 1) t1,
(select monthvalue from temp where id = 2) t2,
(select monthvalue from temp where id = 3) t3,
(select monthvalue from temp where id = 4) t4,
(select monthvalue from temp where id = 5) t5,
(select monthvalue from temp where id = 6) t6,
(select monthvalue from temp where id = 7) t7,
(select monthvalue from temp where id = 8) t8,
(select monthvalue from temp where id = 9) t9,
(select monthvalue from temp where id = 10) t10,
(select monthvalue from temp where id = 11) t11,
(select monthvalue from temp where id = 12) t12

解决方案 »

  1.   

    DECLARE @t TABLE
    (
     
     MonthValue INT 
    )INSERT INTO @t
    SELECT 21 UNION ALL
    SELECT 6 UNION ALL
    SELECT 0 UNION ALL
    SELECT 3 UNION ALL
    SELECT 0 UNION ALL
    SELECT 0 UNION ALL
    SELECT 0 UNION ALL
    SELECT 0 UNION ALL
    SELECT 9 UNION ALL
    SELECT 0 UNION ALL
    SELECT 0 UNION ALL
    SELECT 0 
    SELECT ID = IDENTITY(INT,1,1),* INTO # FROM @tSET LANGUAGE ENGLISH
    DECLARE @sql VARCHAR(8000)
     SELECT @sql = ''
     SELECT @sql = @sql + ',['+LEFT(DATENAME(MONTH,'1990-'+CAST(ID AS VARCHAR)+'-1'),3)+'] = MAX(CASE WHEN ID = '+CAST(ID AS VARCHAR)+' THEN MonthValue END)'
     FROM #
     SELECT @sql = STUFF(@sql, 1, 1, '')
     EXEC('SELECT '+@sql+' FROM #')SET LANGUAGE N'简体中文'
    DROP TABLE #
    Changed language setting to us_english.
    Jan         Feb         Mar         Apr         May         Jun         Jul         Aug         Sep         Oct         Nov         Dec         
    ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- 
    21          6           0           3           0           0           0           0           9           0           0           0Warning: Null value is eliminated by an aggregate or other SET operation.
    已将语言设置改为 简体中文。
      

  2.   

    没有必要 设成英语。我的临时表 Show 本身就有 Jan         Feb       ……
    另外,再问一下 能不能写成
    select * from 一个存储过程
    [我知道用 exec 存储过程名 可以]现在希望能与 select 联合起来
      

  3.   

    2楼的朋友是不是 SET LANGUAGE N '简体中文 ' 多了个 N 
    另外,我去掉N 后抛出了
    服务器: 消息 170,级别 15,状态 1,行 1
    Line 1: Incorrect syntax near ','.谢谢2位 如果能 select from 一个存储过程就搞定了
      

  4.   

    N不能去掉:
    使用 Unicode 数据
    Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。每个 Microsoft® SQL Server™ 排序规则都有一个对表示 char、varchar 和 text 值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。在 Microsoft SQL Server 中,以下数据类型支持 Unicode 数据: nchar
    nvarchar
    ntext