Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server数据透视查询“;“转换失败”;_Sql_Sql Server_Tsql - Fatal编程技术网

SQL Server数据透视查询“;“转换失败”;

SQL Server数据透视查询“;“转换失败”;,sql,sql-server,tsql,Sql,Sql Server,Tsql,目前我有这种格式的数据 Account AccountUnit Description ATL BOS 1111 10 Trucking 23 50 2222 13 Banking 34 21 我想要这个格式 Account AccountUnit Description ATL BOS 1111 10 Trucking 23 50

目前我有这种格式的数据

Account AccountUnit Description  ATL  BOS   
1111      10           Trucking  23   50      
2222      13           Banking   34   21    

我想要这个格式

Account AccountUnit Description  ATL  BOS   
1111      10           Trucking  23   50      
2222      13           Banking   34   21    
我的问题如下

DECLARE 
@FISCAL_YEAR AS NVARCHAR(4),
@PERIOD AS VARCHAR(2),
@COL AS NVARCHAR(MAX),
@SQL AS NVARCHAR(MAX)

SELECT @COL= COALESCE (@COL+ ',','')+QUOTENAME(MX_VALUE)FROM
(SELECT DISTINCT MX_VALUE FROM AUMXVALUE WHERE MATRIX_CAT='_DIV') AS A

SET @FISCAL_YEAR = 2014
SET @PERIOD=6


SET @SQL=
N'
SELECT CURR.COMPANY, CURR.ACCT_UNIT, CURR.DESCRIPTION, CURR.ACCOUNT,
(
(SELECT UNITS.* , GLN.DESCRIPTION FROM
(SELECT 
GLU.COMPANY,
GLU.ACCT_UNIT,
GLU.ACCOUNT,
AMV.MATRIX_CAT,
'+@COL+',
CASE 
WHEN @PERIOD=1 THEN GLU.DB_UNITS_01+GLU.CR_UNITS_01 
WHEN @PERIOD=2 THEN GLU.DB_UNITS_02+GLU.CR_UNITS_02 
WHEN @PERIOD=3 THEN GLU.DB_UNITS_03+GLU.CR_UNITS_03
WHEN @PERIOD=4 THEN GLU.DB_UNITS_04+GLU.CR_UNITS_04 
WHEN @PERIOD=5 THEN GLU.DB_UNITS_05+GLU.CR_UNITS_05 
WHEN @PERIOD=6 THEN GLU.DB_UNITS_06+GLU.CR_UNITS_06 
WHEN @PERIOD=7 THEN GLU.DB_UNITS_07+GLU.CR_UNITS_07 
WHEN @PERIOD=8 THEN GLU.DB_UNITS_08+GLU.CR_UNITS_08 
WHEN @PERIOD=9 THEN GLU.DB_UNITS_09+GLU.CR_UNITS_09
WHEN @PERIOD=10 THEN GLU.DB_UNITS_10+GLU.CR_UNITS_10
WHEN @PERIOD=11 THEN GLU.DB_UNITS_11+GLU.CR_UNITS_11 
WHEN @PERIOD=12 THEN GLU.DB_UNITS_12+GLU.CR_UNITS_12 
ELSE 0 END AS ACT
FROM GLUNITS GLU JOIN GLNAMES GLN 
ON GLU.COMPANY=GLN.COMPANY
AND GLU.ACCT_UNIT='''+100+'''
JOIN AUMXVALUE AMV
ON GLN.OBJ_ID=AMV.OBJ_ID
AND AMV.MATRIX_CAT='''+'_DIV'+'''
AND GLU.FISCAL_YEAR=@FISCAL_YEAR
AND GLU.ACCOUNT=9100
)UNITS
JOIN GLNAMES GLN
ON UNITS.COMPANY=GLN.COMPANY
AND UNITS.ACCT_UNIT=GLN.ACCT_UNIT) CURR
) T PIVOT( SUM(ACT) FOR MX_VALUE IN (' + @COL + ')) AS PIVTBL'

但我总是犯这个错误

Conversion failed when converting the nvarchar value '

SELECT CURR.COMPANY, CURR.ACCT_UNIT, CURR.DESCRIPTION, CURR.ACCOUNT,
(
(SELECT UNITS.* , GLN.DESCRIPTION FROM
(SELECT 
GLU.COMPANY,
GLU.ACCT_UNIT,
GLU.ACCOUNT,
AMV.MATRIX_CAT,
[ATL                             ],[BOS                             ]
CASE 
    WHEN @PERIOD=1 THEN GLU.DB_UNITS_01+GLU.CR_UNITS_01 
    WHEN @PERIOD=2 THEN GLU.DB_UNITS_02+GLU.CR_UNITS_02 
    WHEN @PERIOD=3 THEN GLU.DB_UNITS_03+GLU.CR_UNITS_03
WHEN @PERIOD=4 THEN GLU.DB_UNITS_04+GLU.CR_UNITS_04 
WHEN @PERIOD=5 THEN GLU.DB_UNITS_05+GLU.CR_UNITS_05 
WHEN @PERIOD=6 THEN GLU.DB_UNITS_06+GLU.CR_UNITS_06 
WHEN @PERIOD=7 THEN GLU.DB_UNITS_07+GLU.CR_UNITS_07 
WHEN @PERIOD=8 THEN GLU.DB_UNITS_08+GLU.CR_UNITS_08 
WHEN @PERIOD=9 THEN GLU.DB_UNITS_09+GLU.CR_UNITS_09
WHEN @PERIOD=10 THEN GLU.DB_UNITS_10+GLU.CR_UNITS_10
WHEN @PERIOD=11 THEN GLU.DB_UNIT...

有什么想法吗?提前感谢您的帮助。

您需要扮演
VARCHAR
the
100
以及以下角色:

...
AND GLU.ACCT_UNIT='''+CAST(100 AS VARCHAR(3))+'''
...
...
AND GLU.ACCT_UNIT='''+'100'+'''
...
或者将其作为字符串添加,如下所示:

...
AND GLU.ACCT_UNIT='''+CAST(100 AS VARCHAR(3))+'''
...
...
AND GLU.ACCT_UNIT='''+'100'+'''
...

一些ddl和样本数据怎么样?sqlfiddle.com是一个很好的起点。如果你
打印@SQL
,你会吐出什么?试着将
@SQL
声明为
VARCHAR