2015-08-27 2 views
0

Я пытаюсь показать свое поле PT.TotalAmount (деньги) в десятичном формате до 3 знаков после запятой. Я попытался с помощьюПреобразование типа данных денег в 3 десятичных знака

CAST(ROUND(123.4567, 3) AS MONEY) 

Но я получаю сообщение об ошибке:

An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.

Вот мой SP:

Select PT.[ID] 'TransactionID', PT.BatchNumber, PT.SequenceNumber, PT.TransactionDate, 
PT.TerminalID ,CAST(ROUND(PT.TotalAmount, 2) AS MONEY), PT.TransactionTypeID, TT.TransactionType,  
PT.PAN 'EmbossLine',PT.PreBalanceAmount, PT.PostBalanceAmount, RefTxnID, 
SettlementDate,PaidCash, CreditAmount, DiscountAmount,  
RefPAN, PT.Remarks, '  ' + CashierCard as 'SupervisorCard',St.StoreID  
into #Temp  
from POS_Transactions PT inner join TransactionType TT on TT.TransactionTypeID = PT.TransactionTypeID  
inner join Staff St on St.CardNumber=PT.CashierCard  
where  
PT.[ID] not in (Select distinct isnull(TransactionID,0) from Testcards)  
and (PT.TransactionDate >= @DateFrom)  
and (PT.TransactionDate < @DateTo)  
and (PT.TransactionTypeID = @TransactionTypeID or @TransactionTypeID = -999)  



select T.*, '&nbsp; '+ C.EmbossLine as 'EmbossLine', '&nbsp;'+ C.EmbossLine as 'EmbossLine1',  

isnull(C.FirstName,'') +' '+ isnull(C.LastName,'') 'EmbossName',C.FirstName,C.LastName,City.CityName,Country.CountryName,Country.CurrencyName, PM.MerchantID , PM.MerchantName1, C.AccountNumber, C.VehicleNumber  

from #Temp T  

inner join Card C on C.EmbossLine= T.EmbossLine  

inner join Terminal on Terminal.TerminalID = T.TerminalID  

inner join Merchant PM on PM.MerchantID = Terminal.MerchantID  

inner join City on City.CityID = PM.CityID  

inner join Country on Country.CountryID = PM.CountryID  

where C.Status <>'E3'  

and C.CardID not in (Select distinct isnull(CardID,0) from Testcards)  

and (PM.MerchantID [email protected] or @MerchantID='-999')  

and (C.EmbossLine like '%'[email protected]+'%' or @EmbossLine like '-999')  

and (C.FirstName like '%'[email protected]+'%' or @FirstName like '-999')  

and (C.LastName like '%'[email protected]+'%' or @LastName like '-999')  

and (PM.CountryID = @CountryID or @CountryID ='-999')  

and(PM.CityID = @CityID or @CityID ='-999')  

order by T.TransactionDate, MerchantName1, T.BatchNumber, T.SequenceNumber  

drop table #Temp 

Почему я получаю эту ошибку? Что не так в конверсии? Когда я просто пишу PT.TotalAmount в моем Select заявление, запрос завершается успешно

ответ

0

Просто добавьте любое имя псевдонима для CAST(ROUND(PT.TotalAmount, 2) AS MONEY), как roundedamont(whatever column name you want) в вашем SQL запросе.

+0

Спасибо. У меня еще один вопрос; Он по-прежнему показывает значения до 4 знаков после запятой. Зачем? Нужно ли делать конверсии в моем коде VB для отображения до трех знаков после запятой? – Nuke

+0

Я использовал в SQL Server 2008 R2 и работает (означает, что он показывает только 3 десятичных значения) – Ravi

0

Select * в заявлении требуется каждый столбец имеет уникальное имя

Select PT.[ID] 'TransactionID', PT.BatchNumber, PT.SequenceNumber, PT.TransactionDate, 
PT.TerminalID ,CAST(ROUND(PT.TotalAmount, 2) AS MONEY)<----Give Alias HERE