我是說,可不可以把采購單號與行號和單價合併為一個字符串作為一個字段來處理
可以嗎?SQL表達式請看下面。
SELECT 
   PL.LINE_NUM                                    "LINE_NUM",
   PL.CREATION_DATE                       "CREATION DATE",
   PL.LAST_UPDATE_DATE                 AS UPDATE_DATE,
   FU.USER_NAME                        AS USER_NAME,
   PV.VENDOR_NAME                          "SUPPLIER",
   PVS.VENDOR_SITE_CODE                   "SUPPLIER_SITE",
   PH.SEGMENT1                              "PO_NO",
   MS.SEGMENT1                             "ITEM",
   PL.ITEM_DESCRIPTION                    "DESCRIPTION",
   PL.UNIT_MEAS_LOOKUP_CODE                    "UOM",
   ' '                                     "COMMENTS",
   PL.ITEM_REVISION                       "REVISION",
   PH.AUTHORIZATION_STATUS                 "STATUS",
   PH.CURRENCY_CODE                       "CURRENCY",
   PL.CANCEL_FLAG                             "CANCEL",
   PL.CLOSED_CODE                             "CLOSED",
   PL.UNIT_PRICE                          "PRICE"
 FROM 
 MTL_SYSTEM_ITEMS_B    MS,
 PO_HEADERS_ALL              PH,
 PO_LINES_ALL                          PL,
 PO_VENDORS                       PV,
 PO_VENDOR_SITES_ALL   PVS,
 FND_USER   FU,
 (select PH1.VENDOR_ID,PVS1.VENDOR_SITE_ID,PL1.ITEM_ID
               from PO_HEADERS_ALL PH1, PO_LINES_ALL PL1, PO_VENDORS PV1,PO_VENDOR_SITES_ALL   PVS1,MTL_SYSTEM_ITEMS_B MS1
              where PH1.PO_HEADER_ID  = PL1.PO_HEADER_ID
and PH1.VENDOR_ID = PV1.VENDOR_ID(+)
                    and PH1.VENDOR_SITE_ID = PVS1.VENDOR_SITE_ID(+)
and PH1.ORG_ID = MS1.ORGANIZATION_ID
and PL1.ITEM_ID       = MS1.INVENTORY_ITEM_ID
and nvl(ph1.CLOSED_CODE,'OPEN') not in ('FINALLY CLOSED','FROZEN')        
and nvl(ph1.CANCEL_FLAG,'N')='N'        
and nvl(pl1.CLOSED_CODE,'OPEN') not in ('FINALLY CLOSED','FROZEN')        
and nvl(pl1.CANCEL_FLAG,'N')='N'        
and PH1.ORG_ID = :P_OU_ID
                    and PH1.AUTHORIZATION_STATUS = NVL(:P_STUTAS,PH1.AUTHORIZATION_STATUS)
                    and PH1.TYPE_LOOKUP_CODE = 'BLANKET'
                    and PH1.SEGMENT1 BETWEEN NVL(:P_PO_NO_START,PH1.SEGMENT1) AND NVL(:P_PO_NO_END,PH1.SEGMENT1)
                    and MS1.SEGMENT1 = NVL(:P_ITEM,MS1.SEGMENT1)
                    and PV1.VENDOR_NAME =  NVL(:P_VENDOR,PV1.VENDOR_NAME)
                    and PH1.CREATION_DATE BETWEEN    NVL(:P_FROM_TRANSACTION_DATE,PH1.CREATION_DATE) AND  NVL(:P_TO_TRANSACTION_DATE,PH1.CREATION_DATE)
group by PH1.VENDOR_ID,PVS1.VENDOR_SITE_ID,PL1.ITEM_ID
having count(*) > 1 and min(pl1.UNIT_PRICE) <> max(pl1.UNIT_PRICE)) a1
 WHERE   PH.PO_HEADER_ID  = PL.PO_HEADER_ID
    AND  PL.CREATED_BY    =FU.USER_ID
    AND  PL.ITEM_ID       = MS.INVENTORY_ITEM_ID
and nvl(ph.CLOSED_CODE,'OPEN') not in ('FINALLY CLOSED','FROZEN')        
and nvl(ph.CANCEL_FLAG,'N')='N'        
and nvl(pl.CLOSED_CODE,'OPEN') not in ('FINALLY CLOSED','FROZEN')        
and nvl(pl.CANCEL_FLAG,'N')='N'        
    AND  PVS.VENDOR_SITE_ID(+)  =PH.VENDOR_SITE_ID
    AND  PV.VENDOR_ID(+)        =PH.VENDOR_ID
AND  PH.ORG_ID = MS.ORGANIZATION_ID
    AND  PH.ORG_ID = :P_OU_ID
    AND  PH.AUTHORIZATION_STATUS = NVL(:P_STUTAS,PH.AUTHORIZATION_STATUS)
    AND  PH.TYPE_LOOKUP_CODE = 'BLANKET'
    AND  PH.SEGMENT1 BETWEEN NVL(:P_PO_NO_START,PH.SEGMENT1) AND NVL(:P_PO_NO_END,PH.SEGMENT1)
    AND  MS.SEGMENT1 = NVL(:P_ITEM,MS.SEGMENT1)
    AND  PV.VENDOR_NAME =  NVL(:P_VENDOR,PV.VENDOR_NAME)
    AND  PH.CREATION_DATE BETWEEN    NVL(:P_FROM_TRANSACTION_DATE,PH.CREATION_DATE) AND  NVL(:P_TO_TRANSACTION_DATE,PH.CREATION_DATE)
and  a1.VENDOR_ID = PH.VENDOR_ID
and  a1.VENDOR_SITE_ID=PH.VENDOR_SITE_ID
and  a1.ITEM_ID = PL.ITEM_ID  
 ORDER BY 5,6,8