SQL:在查询结果的末尾添加虚线( - )

时间:2012-08-31 21:46:15

标签: mysql sql row union sqldatatypes

这里我试图通过在数据和结果数据之间使用联合查询来添加额外的行。

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

4 个答案:

答案 0 :(得分:5)

不,你不应该这样做。要做到这一点,你必须将sum(qua)的值转换为varchar,但这是一个坏主意。

绘制一条线应该在表示层中处理。

答案 1 :(得分:1)

使用UNION ALL代替UNION

  

UNION UNION命令用于从两个表中选择相关信息,非常类似于JOIN命令。但是,使用时   UNION命令所有选定的列需要具有相同的数据   类型。使用UNION时,只选择不同的值。

     

UNION ALL UNION ALL命令等于UNION命令,但UNION ALL选择所有值。

Reference

除非要删除重复项,否则应始终使用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