我们可以在SQL中按条件分组合并两列吗?

我们可以在SQL中按条件分组合并两列吗?,sql,Sql,我想知道我们是否可能有如下情况: SELECT Variable1, Variable2, ... FROM MyDB.MyTable GROUP BY ( CONCATENATE ( Variable1 AND Variable2 ) ) 要获得如下结果: Variable1, Variable2, Variable1 and Variable2 只需按Variable1、Variable2进行分组,即可得到所需的结果,但需要选择要合并的列。因此,这将起作用: SELECT Va

我想知道我们是否可能有如下情况:

 SELECT Variable1, Variable2, ...
 FROM MyDB.MyTable
 GROUP BY ( CONCATENATE (  Variable1 AND Variable2 ) )
要获得如下结果:

 Variable1, Variable2, Variable1 and Variable2

只需按
Variable1、Variable2
进行分组,即可得到所需的结果,但需要选择要合并的列。因此,这将起作用:

SELECT Variable1, Variable2, concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY Variable1, Variable2 
……假设
Variable1
Variable2
当然是列名

一般规则是,除了那些包含在
group by
中的聚合函数中之外,您需要拥有每个组件的最小构建块。所以

SELECT concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY concat(Variable1 , Variable2) 
…也可以工作,因为您只需要将连接的值作为输出中的非聚合列,但是

SELECT Variable1, Variable2, concat(Variable1 , Variable2), AggregatedColumn
FROM MyDB.MyTable
GROUP BY concat(Variable1 , Variable2) 
不会,因为它期望
组中的
Variable1
Variable2

另一方面,您也可以使用
Variable1+Variable2
而不是
concat(Variable1,Variable2)


编辑:根据@jarlh下面的评论,
groupbyconcat(Variable1,Variable2)
不是有效的ANSI-SQL,不应该使用它,我也明白了原因。如果
Varaible1
Variable2
ash
win
的话,它会把它分为同一组,就像它们是
as
hwin
ashwi
n
一样,尽管它们很可能是不同的组。

这是什么意思?您的要求是什么?在ANSI SQL中,不,这是不允许的。但是,如果没有聚合函数,GROUPBY就毫无意义。显示一些示例表数据和预期结果。
groupbyconcat(Variable1,Variable2)
实际上是无效的ANSI SQL。GROUP BY子句可能只列出列。我建议的答案是
GROUP BY Variable1,Variable2
,另一个选项只是另一种可能性。通过一个或多个列的投影进行分组适用于大多数主要的DBMS。当您说“GROUP BY子句可能只列出列”时,您指的是什么文档?ISO/IEC 9075-2:2011(E),即ISO/ANSI SQL规范。(符合ANSI SQL的诀窍是在派生表中执行concat部分,然后根据其结果进行分组。)@jarlh,我可以理解这可能导致问题的原因,并编辑了我的答案以反映这一点。