按SQL Server中字段名(列)的位置分组

roc*_*ock 1 sql group-by

在这种情况下,我必须将两列连接起来,并根据所选字段的位置对所选内容进行分组。在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
Run Code Online (Sandbox Code Playgroud)

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

Gor*_*off 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
Run Code Online (Sandbox Code Playgroud)

这对性能没有影响。

我将查询固定为在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
Run Code Online (Sandbox Code Playgroud)