2012-11-30 27 views
0

包含在組我有以下Oracle查詢:選擇字段不是列表

SELECT distinct DM.name, 
    ND.param5 , 
    ND.param4 , 
     DECODE(ND.param3, 'TRS01','Mark for Return to warehouse', 
'TRS02','Waiting for distributor approval on return', 
'TRS03','Waiting for Service Provider approval on return', 
'TRS04','Return to Distributor', 
'TRS05','Return to Warehouse', 
'TRS06','Mark for Return to Distributor', 
'TRS08','Quarantined', 
'TRS10' ,'New', 
'TRS11','Waiting for Distributor acceptance', 
'TRS12' ,'Moved to distributor warehouse', 
'TRS13','Waiting for reseller acceptance', 
'TRS14','Moved to reseller warehouse', 
'TRS15','In-Use', 
'TRS16','Returned', 
'TRS17','Deattached', 
'TRS18','Sold'), NS.name , 
    COUNT(distinct ND.NUMBERDETAILID) serialcount,ND.param3,'ALL', 
    FROM ndetail ND, 
    nbatch NB, 
    nstatus NS, 
    dynamicmaster DM,(select his.createdate,h.numberdetailid,his.numberstatusid,his.param3,his.actualnumber 
from ndetailhistory his, 
(select max(createdate) createdate,numberdetailid 
from ndetailhistory 
group by numberdetailid) h 
where h.numberdetailid = his.numberdetailid 
and h.createdate = his.createdate) NDH 
    WHERE ND.numberbatchid = NB.numberbatchid 
    AND NS.numberstatusid = ND.numberstatusid 
    and DM.DYNAMICMASTERID = NB.WAREHOUSEID 
    and NDH.actualnumber = ND.actualnumber 
    and ND.NUMBERDETAILID = NDH.NUMBERDETAILID 
    and NB.numbergroupid = (select numbergroupid from ngroup where alias = 'TEST') 
    AND (case when 'ALL'='ALL' THEN '1' ELSE ND.PARAM3 END) =(case when 'ALL'='ALL' THEN '1' ELSE 'ALL' END) 
    GROUP BY DM.name,ND.param5,ND.param4,ND.param3,NS.name 
order by 1,3,2 

我想CREATEDATE也是在選擇列表中,但沒有與CREATEDATE要組。

我該如何做到這一點?

回答

0

當您使用GROUP BY時,SELECT列表中的字段必須位於GROUP BY語句或集合函數中。因此,如果您不想將其包含到GROUP BY中,只需將例如MAX(創建)添加到SELECT列表中。

0

選擇列表中的所有非聚合列必須在GROUP BY子句中列出。主選擇列表中的DECODE還沒有別名,這使得它變得非常困難。

SELECT DISTINCT DM.name, 
     ND.param5, 
     ND.param4, 
     DECODE(ND.param3, 'TRS01','Mark for Return to warehouse', 
         'TRS02','Waiting for distributor approval on return', 
         'TRS03','Waiting for Service Provider approval on return', 
         'TRS04','Return to Distributor', 
         'TRS05','Return to Warehouse', 
         'TRS06','Mark for Return to Distributor', 
         'TRS08','Quarantined', 
         'TRS10' ,'New', 
         'TRS11','Waiting for Distributor acceptance', 
         'TRS12' ,'Moved to distributor warehouse', 
         'TRS13','Waiting for reseller acceptance', 
         'TRS14','Moved to reseller warehouse', 
         'TRS15','In-Use', 
         'TRS16','Returned', 
         'TRS17','Deattached', 
         'TRS18','Sold') 
     decoded_param3, 
     NS.name, 
     COUNT(DISTINCT ND.NUMBERDETAILID) serialcount, 
     ND.param3, 
     'ALL' all_code 
    FROM ndetail ND, 
     nbatch NB, 
     nstatus NS, 
     dynamicmaster DM, 
     (SELECT his.createdate, h.numberdetailid, his.numberstatusid, his.param3, 
       his.actualnumber 
      FROM ndetailhistory his, 
       (SELECT MAX(createdate) createdate, numberdetailid 
        FROM ndetailhistory 
       GROUP BY numberdetailid) h 
     WHERE h.numberdetailid = his.numberdetailid 
      AND h.createdate = his.createdate) NDH 
WHERE ND.numberbatchid = NB.numberbatchid 
    AND NS.numberstatusid = ND.numberstatusid 
    AND DM.DYNAMICMASTERID = NB.WAREHOUSEID 
    AND NDH.actualnumber = ND.actualnumber 
    AND ND.NUMBERDETAILID = NDH.NUMBERDETAILID 
    AND NB.numbergroupid = (SELECT numbergroupid FROM ngroup WHERE alias = 'TEST') 
    AND (CASE WHEN 'ALL'='ALL' THEN '1' ELSE ND.PARAM3 END) = 
     (CASE WHEN 'ALL'='ALL' THEN '1' ELSE 'ALL'  END) 
GROUP BY DM.name, ND.param5, ND.param4, decoded_param3, NS.name, ND.param3, all_code 
ORDER BY 1,3,2 

你應該瞭解這些神話般的東西叫做「表」,讓你可以存儲解碼操作的信息,如在數據庫中查找ND.param3,而不是寫在表脫離手寫(和不同)中不同的查詢。

您還應該瞭解顯式JOIN查詢並使用它們。

相關問題