1

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

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 Management Studio r2 2008

4

4 回答 4

5

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

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

于 2012-08-31T21:47:09.613 回答
1

使用UNION ALL代替UNION

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

UNION ALL UNION ALL 命令与 UNION 命令相同,但 UNION ALL 选择所有值。

参考

UNION ALL除非您删除重复项,否则您应该始终使用。

于 2012-08-31T22:01:10.010 回答
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
于 2012-08-31T21:58:25.887 回答
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
于 2012-08-31T21:54:20.473 回答