1

2 つの列を連結し、選択したフィールドの位置に基づいて選択をグループ化する必要がある状況があります。これは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

EDITED 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

これによるパフォーマンスへの影響はありません。

グループ 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 に答える