私はクライアントのために構築しているジョブ原価計算レポートを持っています。彼らの勘定科目表には小数点以下10桁(1001.55)が含まれています。私は何をしていても、nvarcharを浮動小数点、整数または数値に変換することはできません。私がCOA 5310でフィルタリングしようとしている最後のWhere節を取り出した場合、問題なく実行されます。どのような目立つ明白な問題が私は見落としていますか?どんな助けもありがとう!データ型nvarcharを小数点以下を使用して変換する
--Build Equiptment
Create Table tmpEquiptment
(
[dtmDate] datetime
,[iCustID] int
,[Amount] money
,[COA_Number] DECIMAL(18,2)
)
Insert into tmpEquiptment
SELECT dtmDate, iCustID, (Register.Debit - Register.Credit), STR(COA.Number)
From Register
Inner Join COA on Register.AccountID = COA.ID
WHERE TranType IN ('Payment', 'Invoice', 'Sale', 'Credit', 'Journal Entry', 'Check', 'Item Receipt', 'Bill', 'Vendor Credit', 'CC Charge', 'CC Credit', 'Deposit', 'Inventory Adjustment', 'Serialized Adjustment')
AND Coa.Type in ('Cost of Goods Sold','Expense','Other Expense')
AND Isnull(COA.iJobCostingType,0) In (2,3)
AND Register.iCustID Is Not Null
And Register.dtmDate Between '2016-01-01 00:00:00.000' AND '2018-01-01 00:00:00.000'
And STR(COA.Number) = 5310
- または -
--Build Equiptment
Create Table tmpEquiptment
(
[dtmDate] datetime
,[iCustID] int
,[Amount] money
,[COA_Number] DECIMAL(18,2)
)
Insert into tmpEquiptment
SELECT dtmDate, iCustID, (Register.Debit - Register.Credit), CONVERT(varchar(10), COA.Number)
From Register
Inner Join COA on Register.AccountID = COA.ID
WHERE TranType IN ('Payment', 'Invoice', 'Sale', 'Credit', 'Journal Entry', 'Check', 'Item Receipt', 'Bill', 'Vendor Credit', 'CC Charge', 'CC Credit', 'Deposit', 'Inventory Adjustment', 'Serialized Adjustment')
AND Coa.Type in ('Cost of Goods Sold','Expense','Other Expense')
AND Isnull(COA.iJobCostingType,0) In (2,3)
AND Register.iCustID Is Not Null
And Register.dtmDate Between '2016-01-01 00:00:00.000' AND '2018-01-01 00:00:00.000'
And CONVERT(varchar(10), COA.Number) = 5310
- または -
--Build Equiptment
Create Table tmpEquiptment
(
[dtmDate] datetime
,[iCustID] int
,[Amount] money
,[COA_Number] DECIMAL(18,2)
)
Insert into tmpEquiptment
SELECT dtmDate, iCustID, (Register.Debit - Register.Credit), CONVERT(DECIMAL(18,2), COA.Number)
From Register
Inner Join COA on Register.AccountID = COA.ID
WHERE TranType IN ('Payment', 'Invoice', 'Sale', 'Credit', 'Journal Entry', 'Check', 'Item Receipt', 'Bill', 'Vendor Credit', 'CC Charge', 'CC Credit', 'Deposit', 'Inventory Adjustment', 'Serialized Adjustment')
AND Coa.Type in ('Cost of Goods Sold','Expense','Other Expense')
AND Isnull(COA.iJobCostingType,0) In (2,3)
AND Register.iCustID Is Not Null
And Register.dtmDate Between '2016-01-01 00:00:00.000' AND '2018-01-01 00:00:00.000'
And CONVERT(DECIMAL(18,2), COA.Number) = 5310
- または -
--Build Equiptment
Create Table tmpEquiptment
(
[dtmDate] datetime
,[iCustID] int
,[Amount] money
,[COA_Number] DECIMAL(18,2)
)
Insert into tmpEquiptment
SELECT dtmDate, iCustID, (Register.Debit - Register.Credit), CAST([COA.Number] AS NVARCHAR(25))
From Register
Inner Join COA on Register.AccountID = COA.ID
WHERE TranType IN ('Payment', 'Invoice', 'Sale', 'Credit', 'Journal Entry', 'Check', 'Item Receipt', 'Bill', 'Vendor Credit', 'CC Charge', 'CC Credit', 'Deposit', 'Inventory Adjustment', 'Serialized Adjustment')
AND Coa.Type in ('Cost of Goods Sold','Expense','Other Expense')
AND Isnull(COA.iJobCostingType,0) In (2,3)
AND Register.iCustID Is Not Null
And Register.dtmDate Between '2016-01-01 00:00:00.000' AND '2018-01-01 00:00:00.000'
And CAST([COA.Number] AS NVARCHAR(25)) = 5310
チャートを小数点として表すことは、悪い考えであると思われます。明らかにそのアイディアを持っていた人は、RDBMSを念頭に置いていませんでした。別々の列に保管したり、少なくともハイフンと組み合わせたりするのはいかがですか?あなたの問題は、10進数値を文字列としてキャストして、それを整数と比較しようとしていることです。 '5310.22'と5310を比較することはできません。左の4桁を入力するか、文字列を比較する必要があります。 –
あなたは 'WHERE COA.Number = '5130''を試しましたか? – BJones
なぜCOA.Numberの型をWHERE句で変更していますか?比較のために列の独自の型を使用します。 –