我对 SQL 还很陌生,并且看到了很多问题,但我还没有看到任何答案来帮助我获得结果。我有一个查询,需要按升序对列 REFDES 进行排序。任何帮助将不胜感激。在我提供的图片中,您可以看到 REFDES 列不是按升序排列的。
WITH DistinctRefDes AS (
SELECT bom.PINBR,
bom.PITR,
bom.CINBR,
bom.CITR,
REPLACE(TRIM(bom.REFDES), ',', '') AS REFDES
FROM FILTD.PREFP110 bom
WHERE TRIM(bom.REFDES) <> ''
GROUP BY bom.PINBR,
bom.PITR,
bom.CINBR,
bom.CITR,
REPLACE(TRIM(bom.REFDES), ',', '')
),
OrderedRefDes AS (
SELECT PINBR,
PITR,
CINBR,
CITR,
REFDES
FROM DistinctRefDes
ORDER BY REFDES
),
DistinctRefDes2 AS (
SELECT PINBR,
PITR,
CINBR,
CITR,
LISTAGG(REFDES, ' ') WITHIN GROUP (ORDER BY REFDES) AS REFDES
FROM OrderedRefDes
GROUP BY PINBR,
PITR,
CINBR,
CITR
)
SELECT bom.PINBR AS "PNumber",
i2.ITDSC AS "PName",
bom.PITR AS "PRev",
bom.CINBR AS "CNumber",
itmrva.ITDSC AS "CDesc",
bom.CITR AS "CRev",
bom.QTYPR AS "Qty",
COALESCE(DistinctRefDes2.REFDES, '') AS REFDES,
itembl.MOHTQ
FROM AMFLIBD.PSTDTL bom
LEFT JOIN DistinctRefDes2
ON bom.PINBR = DistinctRefDes2.PINBR
AND bom.PITR = DistinctRefDes2.PITR
AND bom.CINBR = DistinctRefDes2.CINBR
AND bom.CITR = DistinctRefDes2.CITR
LEFT JOIN AMFLIBD.ITMRVA itmrva
ON bom.CINBR = itmrva.ITNBR AND bom.CITR = itmrva.ITRV
LEFT JOIN AMFLIBD.ITMRVA i2
ON bom.PINBR = i2.ITNBR AND bom.PITR = i2.ITRV
LEFT JOIN AMFLIBD.ITEMBL itembl
ON bom.CINBR = itembl.ITNBR AND itembl.HOUSE = 'MVS'
WHERE bom.PINBR = '980-218130-106'
AND bom.PITR = 'B'
ORDER BY bom.CINBR;
要按升序对 REFDES 列进行排序,您需要修改包含 REFDES 的 ORDER BY 子句。 您可以尝试以下操作: ORDER BY COALESCE(DistinctRefDes2.REFDES, "), bom.CINBR; 而不是 ORDER BY bom.CINBR;