1

我有一种情况,我必须连接两列并根据所选字段的位置对选择进行分组。这在 SQL 中是否可能。

我的示例代码不执行。这里, GROUP BY 4 必须按 po_noRM 分组

SELECT Table_A.Po_no, Table_A.rmcode, SUM(Table_A.weight) as recvqty,
    LTRIM(RTRIM(Table_A.po_no)) + LTRIM(RTRIM(MBStran.rmcode)) as po_noRM
FROM Table_A
GROUP BY 4
ORDER BY Table_A.Po_no

已编辑 Table_A 中的所有数据都是 varchar(20) 类型

4

2 回答 2

5

如果你不喜欢重复复杂的表达式,你可以使用子查询来代替:

select Table_A.Po_no, Table_A.rmcode, SUM(Table_A.weight) as recvqty,
       po_noRM
from (SELECT Table_A.Po_no, Table_A.rmcode, 
             LTRIM(RTRIM(Table_A.po_no)) + LTRIM(RTRIM(Table_A.rmcode)) as po_noRM
      FROM Table_A
     ) T
group by po_noRM, Po_no, rmcode
ORDER BY 1 desc

这对性能没有影响。

我修复了查询以包括除 group b 语句中的总和之外的所有列。此外,在 rtrim(ltrim()) 语句中还提到了另一个表。我将其更改为 Table_A。

但是,我怀疑这个查询并没有做你真正想要的(这是为了减少返回的行数,因为你仍然按 po_noRM 的组件进行分组)。这可能更接近您想要的:

select Po_no_trim, rmcode_trim, SUM(Table_A.weight) as recvqty,
       (po_no_trim+rmcode_trim) as po_noRM
from (SELECT LTRIM(RTRIM(Table_A.po_no)) as po_no_trim,
             LTRIM(RTRIM(Table_A.rmcode)) as rmcode_trim, Table_A.weight
      FROM Table_A
     ) T
group by po_noRM_trim, Po_no_trim
ORDER BY 1 desc
于 2012-07-24T15:55:54.990 回答
2

您在语句中包含的任何字段都SELECT必须在聚合函数中或必须在GROUP BY

SELECT Table_A.Po_no, Table_A.rmcode, SUM(Table_A.weight) as recvqty,
    LTRIM(RTRIM(Table_A.po_no)) + LTRIM(RTRIM(MBStran.rmcode)) as po_noRM
FROM Table_A
GROUP BY Table_A.Po_no, Table_A.rmcode, LTRIM(RTRIM(Table_A.po_no)) + LTRIM(RTRIM(MBStran.rmcode))
ORDER BY Table_A.Po_no
于 2012-07-24T15:51:29.937 回答