none
江湖救急“UNION ALL”的疑问 RRS feed

  • 问题

  • “UNION   ALL”不能将“列”完全一样的记录合并吗???

    如下图:

    问题一:如上图,“第一条记录”和“第三条记录”是使用“UNION   ALL”关联起来的,而且这两条记录的列名完全一致。为什么这两条记录不会合并起来呢?    

              同时,将“01”、“02”、“03”、“04”、“05”、“06”、“07”、“08”、“10”、“11”、“12”列的数值加起来求和,作为合并后的记录的值。

    问题二:UNION   ALL”不支持这样的功能吗?    如果要实现这样的功能应该怎么办???   用什么方法,有实例可以参考吗?


    Science and technology is my lover.

    2012年9月18日 6:48

答案

  • UNION ALL 是把多个查询结果合并为一个,如果把一个查询结果比喻成一页纸的话,那UNION ALL就是把多页纸拼在一齐而已

    如果你要把最终结果中的重复记录去掉,那么应该用 UNION

    如果你要对列的值进行汇总求和之类的话,那个叫聚合,不是合并,那应该使用 GROUP BY + 聚合函数(比如示各SUM,求平均AVG)去做

    2012年9月18日 7:52
  • CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

    以下示例返回字符序列 bicycleDocument 表的 DocumentSummary 列中的起始位置。

    DECLARE @document varchar(64); SELECT @document = 'Reflectors are vital safety' + ' components of your bicycle.'; SELECT CHARINDEX('bicycle', @document);

    http://msdn.microsoft.com/zh-cn/library/ms186323.aspx


    2012年9月18日 12:19
  • 谢谢各位大师,但为什么,

    LIKE '%A%' 可以作为 “if”判定条件的。

    而,

    if CHARINDEX(@CircuitType,'A')>0 却不行呢?

    为什么呢?

    Science and technology is my lover.

    因为你把参数搞反了(又是没有看语法说明吧)

    if CHARINDEX('A', @CircuitType)>0
    2012年9月19日 1:15

全部回复

  • UNION ALL 是把多个查询结果合并为一个,如果把一个查询结果比喻成一页纸的话,那UNION ALL就是把多页纸拼在一齐而已

    如果你要把最终结果中的重复记录去掉,那么应该用 UNION

    如果你要对列的值进行汇总求和之类的话,那个叫聚合,不是合并,那应该使用 GROUP BY + 聚合函数(比如示各SUM,求平均AVG)去做

    2012年9月18日 7:52
  • 建议楼主在联机帮助中查下相关的语法说明
    2012年9月18日 7:53
  • 多谢各位大师,问题解决了,求和就可以了。但是小弟还有一个其它问题想请教下。

    还请各位大师指教。


    set @CircuitType = ''''+ REPLACE(@CircuitType,',',''',''')+''''
    print @CircuitType

    “print” 出来的值为 “ 'A','E' ”

    现在想判断“@CircuitType”中是否包含“ A ”

    应该怎样判断呢??? 请各位大侠指教。


    小弟这样判断的,但是不行啊。

    if CHARINDEX(@CircuitType,'A')>0

    Science and technology is my lover.

    2012年9月18日 8:18
  • CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

    以下示例返回字符序列 bicycleDocument 表的 DocumentSummary 列中的起始位置。

    DECLARE @document varchar(64); SELECT @document = 'Reflectors are vital safety' + ' components of your bicycle.'; SELECT CHARINDEX('bicycle', @document);

    http://msdn.microsoft.com/zh-cn/library/ms186323.aspx


    2012年9月18日 12:19
  • 谢谢各位大师,但为什么,

    LIKE '%A%' 可以作为 “if”判定条件的。

    而,

    if CHARINDEX(@CircuitType,'A')>0 却不行呢?

    为什么呢?

    Science and technology is my lover.

    2012年9月19日 0:51
  • 谢谢各位大师,但为什么,

    LIKE '%A%' 可以作为 “if”判定条件的。

    而,

    if CHARINDEX(@CircuitType,'A')>0 却不行呢?

    为什么呢?

    Science and technology is my lover.

    因为你把参数搞反了(又是没有看语法说明吧)

    if CHARINDEX('A', @CircuitType)>0
    2012年9月19日 1:15