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
the100
以及以下角色:
...
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
。