TSQL:如何在不更改数据的情况下使用UNION ALL组合两个值(money / int)?

我有以下查询:
create table #Result (Reward varchar(40), Value MONEY);

insert #Result exec GetCurrentCycleQualifierStatusByAccountId @AccountId=76011;

with cteFirstResults as
(select Reward, round(Value,2) as Value from #Result where Reward like '%Balance%'), 
cteSecondResults as
(select Reward, convert(INTEGER, Value) as Value from #Result where Reward NOT like    '%Balance%')

select * from cteFirstResults 
UNION ALL
select * from cteSecondResults;

drop table #Result;
当针对每个“cte”表单独运行select *时,我得到了我想要的结果。 但是当一起运行时,我会得到类似的东西:
Reward          Value
------          -----
Daily Balance   4709.00
Value A         1.00
Value B         9.00
我希望值A /值B数据显示没有任何十进制值,就像它们直接对表运行select时一样。如何将两个查询合并为一个以正确显示此数据? Round(值,0)什么都不做。 我无法更改我正在收集数据的sproc,但我可以按照我喜欢的方式制作临时表。 谢谢, 贾森 解决方案:
create table #Result (Reward varchar(40), Value MONEY);
insert #Result exec GetCurrentCycleQualifierStatusByAccountId @AccountId=76011;
With cteFirstResults as
(
Select Reward, Value
From #Result 
Where Reward like '%Balance%'
)
,  cteSecondResults as
(
Select Reward, cast(Value as int) as Value
From #Result 
Where Reward Not like '%Balance%'
)
Select Reward, Cast( Value As varchar(max)) As Value
From cteFirstResults 
Union All
Select Reward, Cast( value As varchar(max)) as Value
From cteSecondResults;
drop table #Result;
    
已邀请:
问题是整数被隐式转换为十进制,因为它们以十进制列表示。 如果您只想显示值,请将它们都转换为字符串。
    CREATE TABLE #test
(
    test decimal(9,2)
)

CREATE TABLE #test2
(
test int
)

INSERT INTO #test (test)
SELECT 1.25 UNION ALL
SELECT 172813.99

INSERT INTO #test2 (test)
SELECT 134 UNION ALL
SELECT 41

SELECT CAST(test as  varchar(max)) FROM #Test
UNION ALL
SELECT CAST(test as  varchar(max)) FROM #Test2
结果:
1.25
172813.99
134
41
    
在联合中,SQL Server将假定第二个选择的数据类型与第一个选择的数据类型相同,并且它可以转换它们的位置,这样做。你必须在自己的游戏中击败它,你自己的转换 在最终选择(带有Union的那个)中按摩两种情况下的数据为字符串。在将输出转换为字符串之前,根据需要格式化输出。     
每个Sql Server列只能有1种数据类型。 回合(钱,4)返还钱(4)* convert(int)返回一个int 基于数据类型优先级 #13。钱 #16。 INT 结果列是钱(4)。因此,列中的所有值都将使用money(4)格式化。 你的选择是 转换(浮动)跨越两个 - 下行:值1.1显示为1.1,而不是1.10 convert(varchar) - 你声明你不想要这个,它将数据类型更改为接收程序 FWIW   Round(值,0)什么都不做。 它确实做了一些事情。它会将CPU的int值转换为另一个int值(相同值)。顺便提一下,结果类型是(仍然)“int”。这与格式化无关。 REF:
declare @m money
set @m = 12.3233
select SQL_VARIANT_PROPERTY(round(@m,2), 'basetype')   -- money
select SQL_VARIANT_PROPERTY(round(@m,2), 'precision')  -- 19
select SQL_VARIANT_PROPERTY(round(@m,2), 'scale')      -- 4
    

要回复问题请先登录注册