2016-10-11 34 views
1

示例代码转换十进制转换为字符串在枢轴

Declare 
    @table1 VARCHAR(MAX) 

Set @table1 = 'Select * from @tempTbl' 


Declare 
    @List VARCHAR(MAX), 
    @Pivot VARCHAR(MAX) 

Select @List = ISNULL(@List + ',', '') + TrxCd From TransacMaster Where Module = 'CB' 

Set @Pivot = ' 
SELECT ROW_NUMBER() OVER (ORDER BY DebtorCd ASC) As RowIndex, * 
FROM (
    Select Distinct 
     c.UserId, 
     d.Name, 
     b.TrxCd 
     SUM(b.Amount) As Amount 
    From tbl_InvH a 
    Inner Join tbl_InvD b on a.subCd = b.subCd and a.InvNo = b.InvNo 
    Left Join tbl_User c On a.UserId = c.UserId 
    Left Join tbl_Personnel d on c.PersonnelId = d.PersonnelId 
    Group By c.UserId, d.Name, b.TrxCd 
) as s 
PIVOT 
(
    SUM(Amount) 
    FOR TrxCd IN (' + @List + ') 
)AS pvt' 


Declare @Result nVarchar(MAX) 

Set @Result = @table1 + ' 
Union All 
' + @Pivot 

Exec sp_executesql @Result 

我想从十进制到字符串转换领域金额,因为在此之后我想UNION与另一个表,但是从另一个表的字段数量和领域是不同的类型。

我已经试过CAST(SUM(金额)为varchar),但错误:

'CAST' 是不是一个公认的聚合函数。

我不能在主选择转换,因为TrxCd领域是动态

结果枢纽

RowIndex | UserId | Name  | IT01 | IT02 | IT03 | IT04 
-------------------------------------------------------------------------------- 
1   | John | John Ivy | 2,000 | 2,000 | 1,000 | 5,000 
2   | Merry | Merry Ish | 1,000 | 1,000 | 1,000 | 6,000 

其他表

RowIndex | UserId | Name  | Transac1 | Transac2 | Transac3 | Transac4 
------------------------------------------------------------------------------------------------- 
1   | John | John Ivy | Trx Bank A | Trx Bank B | Trx Bank C | Trx Bank D 

我应该怎么做才能转换场量枢。

+0

添加查询与'UNION' –

+0

@Prdp联合查询已添加 – Noob

+0

你并不真的需要一个SUM()在枢轴,作为数据源表已经总结。所以,你可以用一个不同的集合函数,比如MAX(),就像这样:'PIVOT(MAX(CAST(Amount AS VARCHAR(20)))for TrxCd IN('+ @List +'))AS pvt' – cha

回答

0

由于动态性,您可以采用相同的@List表达式Select @List = ISNULL(@List + ',', '') + TrxCd From TransacMaster Where Module = 'CB'并在主select中为动态铸造创建第二个;

Select @List2 = ISNULL(@List2 + ',', '') + 'cast(' + TrxCd + 'as varchar)' From TransacMaster Where Module = 'CB' 

然后使用这个和额外的列来替换main select中的asterix;

'SELECT ROW_NUMBER() OVER (ORDER BY DebtorCd ASC) As RowIndex, UserId, Name,' + @List2 +'....' 
相关问题