【问题标题】:The type of column "Date" conflicts with the type of other columns specified in the UNPIVOT list“日期”列的类型与 UNPIVOT 列表中指定的其他列的类型冲突
【发布时间】:2019-06-09 13:40:48
【问题描述】:

我有以下代码在一组列上执行 Pivot 和 Unpivot:

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX),
    @colsUnpivot AS NVARCHAR(MAX)

select @colsUnpivot = stuff((select ','+quotename(C.name)
         from tempdb.sys.columns as C
         where C.object_id = object_id('tempdb..#TmpTable')
         for xml path('')), 1, 1, '')


SET @cols = STUFF((SELECT ',' + QUOTENAME(a.Date) 
            FROM 
            (Select top 10000 date from 
             #TmpTable
            order by  date) a
            group by a.Date
            order by a.Date
             FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, ' + @cols + ' from 
            (
                select Date,name,value
                from #TmpTable
                unpivot
                (
                  value for name in ('+@colsUnpivot+')
                ) unpiv
           ) x
            pivot 
            (
                sum(value)
                for date in (' + @cols + ')
            ) p '

exec(@query)

但是,我不断收到这些错误,我不知道为什么:

“日期”列的类型与 UNPIVOT 列表中指定的其他列的类型冲突。

列名“日期”无效

临时表中Date列的类型为datetime

【问题讨论】:

  • 您需要将其转换为字符串才能与其他列兼容。
  • 在不深入研究问题的情况下,我建议您使用与数据库保留字不同的名称。
  • 谢谢。现在,我收到其他十进制列的 UNPIVOT 列表的数据类型错误。我应该将值转换为十进制吗?
  • 这是我尝试过的,但仍然得到相同的错误:select date,name,CONVERT(DECIMAL(38,4),value) as value from #TmpTable

标签: sql sql-server tsql


【解决方案1】:

这篇文章对解释这个问题很有帮助。基本上,我必须将 unpivot 部分的内部选择语句中所有列的值转换为十进制:

Error : The type of column "DOB" conflicts with the type of other columns specified in the UNPIVOT list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    相关资源
    最近更新 更多