这里我试图通过在数据和结果数据之间使用联合查询来添加额外的行。
select color, item, sum(qua) from inventory
Group by color, item
UNION
Select '----','----','----'
Union
select Count(color), 'total', sum(qua)
from inventory
结果将是:
ITME COLOR QUA
---- ----- ----
chair Black 520
chair pink 1028
chair Red 1050
chair Yellow 524
table Black 1048
table Blue 124
table pink 624
table Red 524
table Yellow 548
----- ----- ----- <----This extra row.
13 total 5990
我使用了上面的查询,但它显示了数据类型不匹配错误。 将varchar值'----'转换为数据类型int时转换失败。 我正在使用Microsoft SQL Server管理工作室r2 2008
答案 0 :(得分:5)
不,你不应该这样做。要做到这一点,你必须将sum(qua)
的值转换为varchar,但这是一个坏主意。
绘制一条线应该在表示层中处理。
答案 1 :(得分:1)
使用UNION ALL
代替UNION
UNION UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,使用时 UNION命令所有选定的列需要具有相同的数据 类型。使用UNION时,只选择不同的值。
UNION ALL UNION ALL命令等于UNION命令,但UNION ALL选择所有值。
除非要删除重复项,否则应始终使用UNION ALL
。
答案 2 :(得分:0)
这应仅用于在查询窗口中进行测试,否则请遵循Mark Byers建议
select color, item, CAST(sum(qua) as VARCHAR) As QUA from inventory
Group by color, item
UNION ALL
Select '----','----','----'
UNION ALL
select CAST(Count(color) AS VARCHAR), 'total', CAST(sum(qua) AS VARCHAR)
from inventory
答案 3 :(得分:0)
这里有两件事。首先,sum(qua)
和'----'
的类型不同(数字与文字)。
select color, item, convert(nvarchar(30),sum(qua)) from inventory
Group by color, item
UNION
Select '----','----','----'
Union
select Count(color), 'total', sum(qua)
from inventory
其次,您希望SQL按SELECT的顺序返回数据,而则不是。工会的行可以按任何顺序排列。要获得结果,您需要订购技巧是必要的:
select color, item, summary from
(
select 0 as ToOrder, color, item, convert(nvarchar(30),sum(qua)) as summary from inventory
Group by color, item
UNION
Select 1, '----','----','----'
Union
select 2, Count(color), 'total', sum(qua)
from inventory
) as x
order by ToOrder asc