Select * From (select * from 2002)Union all(Select * from 2003) ----------- 或写成: ------------- Select * From (select * from 2002)Union all(Select * from 2003) as temp (dd,tt)----------------------------------- 其实你的结果只要即可 记得2002和2003地表结构要一样 select * from 2002 Union all Select * from 2003如果要排序 可以 select * from (select * from 2002 Union all Select * from 2003) order by 1
Union all是sql-92中的标准语法。 以上只是一个举例的说法。 可以如下描述:如何使union all生成的数据集再利用。我已经搜索到几篇,但都通不过。 如把上句写全: select dd,tt from (select dd,tt from 2002 union all select dd,tt from 2003 ) as temp (dd,tt) 即使如此,还是通不过。 请各位赐教!
UNION 运算符使用准则 使用 UNION 运算符时请遵循以下准则: · 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。 · 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。 · 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。 示例如下: table3 table4 a b -c a b int char(4) char(4) char(4) float --- ------- ------- ------- ------- 1 abc jkl jkl 1.000 2 def mno mno 5.000 3 ghi pqr 执行以下查询: SELECT a, b FROM table3 UNION SELECT b, a FROM table4 下面是结果集: a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno 在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。 以下查询将产生错误信息,因为相应列的数据类型不兼容: SELECT b, c FROM table3 UNION SELECT a, b FROM table4 · 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列: · SELECT city AS Cities FROM stores_west · UNION · SELECT city FROM stores_east · ORDER BY city
试试 select dd,tt from 2002 union all select dd,tt from 2003 如果还出错 就说明你的数据库不支持union all 不一定每个数据库都实现标准的sql-92
select * from 2002 Union all Select * from 2003 这样写就可以
谢谢各位的回答! from字句中的 select dd,tt from 2002 union all select dd,tt from 2003 是可以通过的,但若加上一部分:as temp(dd,tt),为: select dd,tt from 2002 union all select dd,tt from 2003 as temp(dd,tt) 或加括号 (select dd,tt from 2002 union all select dd,tt from 2003 as temp(dd,tt) 则都有错误正在想办法。 谢谢各位!
不加括号为“from 字句错误” 加括号则为“联合查询错误” --上回复中加括号应为: (select dd,tt from 2002 union all select dd,tt from 2003) as temp(dd,tt) 少打了个括号
为什么要加 as temp(dd,tt)本来语句 select dd,tt from 2002 union all select dd,tt from 2003 就会返回记录集,其字段以第一个select语句为准, 返回的记录集肯定有两个字段:dd、tt UNION 运算符使用准则 使用 UNION 运算符时请遵循以下准则: · 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。 · 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。 · 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。 示例如下: table3 table4 a b -c a b int char(4) char(4) char(4) float --- ------- ------- ------- ------- 1 abc jkl jkl 1.000 2 def mno mno 5.000 3 ghi pqr 执行以下查询: SELECT a, b FROM table3 UNION SELECT b, a FROM table4 下面是结果集: a b -------- ----- 1.000000 abc 2.000000 def 3.000000 ghi 1.000000 jkl 5.000000 mno 在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。 以下查询将产生错误信息,因为相应列的数据类型不兼容: SELECT b, c FROM table3 UNION SELECT a, b FROM table4 · 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列: · SELECT city AS Cities FROM stores_west · UNION · SELECT city FROM stores_east · ORDER BY city
先说说你要的结果是什么 为什么一定要变成你要的那个as temp(dd,tt) 而且这并不是标准的sql 如果你要建立一个虚表 可以改成 create view temp(dd,tt) as select dd,tt from 2002 union all select dd,tt from 2003 或者是 select* from ( select dd,tt from 2002 union all select dd,tt from 2003 ) temp
From
(select * from 2002)Union all(Select * from 2003)
-----------
或写成:
-------------
Select *
From
(select * from 2002)Union all(Select * from 2003) as temp (dd,tt)-----------------------------------
其实你的结果只要即可 记得2002和2003地表结构要一样
select * from 2002
Union all
Select * from 2003如果要排序
可以
select * from
(select * from 2002
Union all
Select * from 2003)
order by 1
以上只是一个举例的说法。
可以如下描述:如何使union all生成的数据集再利用。我已经搜索到几篇,但都通不过。
如把上句写全:
select dd,tt
from
(select dd,tt from 2002 union all
select dd,tt from 2003 )
as temp (dd,tt)
即使如此,还是通不过。
请各位赐教!
使用 UNION 运算符时请遵循以下准则:
· 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
· 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
· 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
示例如下:
table3 table4
a b -c a b
int char(4) char(4) char(4) float
--- ------- ------- ------- -------
1 abc jkl jkl 1.000
2 def mno mno 5.000
3 ghi pqr 执行以下查询:
SELECT a, b FROM table3
UNION
SELECT b, a FROM table4
下面是结果集:
a b
-------- -----
1.000000 abc
2.000000 def
3.000000 ghi
1.000000 jkl
5.000000 mno
在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。
以下查询将产生错误信息,因为相应列的数据类型不兼容:
SELECT b, c FROM table3
UNION
SELECT a, b FROM table4
· 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列:
· SELECT city AS Cities FROM stores_west
· UNION
· SELECT city FROM stores_east
· ORDER BY city
select dd,tt from 2002 union all
select dd,tt from 2003
如果还出错 就说明你的数据库不支持union all
不一定每个数据库都实现标准的sql-92
Union all
Select * from 2003
这样写就可以
from字句中的
select dd,tt from 2002 union all
select dd,tt from 2003
是可以通过的,但若加上一部分:as temp(dd,tt),为:
select dd,tt from 2002 union all
select dd,tt from 2003
as temp(dd,tt)
或加括号
(select dd,tt from 2002 union all
select dd,tt from 2003
as temp(dd,tt)
则都有错误正在想办法。
谢谢各位!
加括号则为“联合查询错误”
--上回复中加括号应为:
(select dd,tt from 2002 union all
select dd,tt from 2003)
as temp(dd,tt)
少打了个括号
select dd,tt from 2002
union all
select dd,tt from 2003
就会返回记录集,其字段以第一个select语句为准,
返回的记录集肯定有两个字段:dd、tt
UNION 运算符使用准则
使用 UNION 运算符时请遵循以下准则:
· 在使用 UNION 运算符组合的语句中,所有选择列表的表达式数目必须相同(列名、算术表达式、聚合函数等)。
· 在使用 UNION 组合的结果集中的相应列、或个别查询中使用的任意列的子集必须具有相同数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或提供了显式转换。例如,在 datetime 数据类型的列和 binary 数据类型的列之间不可能存在 UNION 运算符,除非提供了显式转换,而在 money 数据类型的列和 int 数据类型的列之间可以存在 UNION 运算符,因为它们可以进行隐性转换。
· 用 UNION 运算符组合的各语句中对应的结果集列出现的顺序必须相同,因为 UNION 运算符是按照各个查询给定的顺序逐个比较各列。
示例如下:
table3 table4
a b -c a b
int char(4) char(4) char(4) float
--- ------- ------- ------- -------
1 abc jkl jkl 1.000
2 def mno mno 5.000
3 ghi pqr 执行以下查询:
SELECT a, b FROM table3
UNION
SELECT b, a FROM table4
下面是结果集:
a b
-------- -----
1.000000 abc
2.000000 def
3.000000 ghi
1.000000 jkl
5.000000 mno
在 UNION 操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。在前面的示例中,int 值转换成 float 值,因为 float 类型的优先权比 int 类型高。有关更多信息,请参见数据类型的优先顺序。
以下查询将产生错误信息,因为相应列的数据类型不兼容:
SELECT b, c FROM table3
UNION
SELECT a, b FROM table4
· 通过 UNION 生成的表中的列名来自 UNION 语句中的第一个单独的查询。若要用新名称引用结果集中的某列(例如在 ORDER BY 子句中),必须按第一个 SELECT 语句中的方式引用该列:
· SELECT city AS Cities FROM stores_west
· UNION
· SELECT city FROM stores_east
· ORDER BY city
而且这并不是标准的sql
如果你要建立一个虚表
可以改成
create view temp(dd,tt)
as
select dd,tt from 2002 union all
select dd,tt from 2003 或者是
select* from (
select dd,tt from 2002 union all
select dd,tt from 2003 ) temp