1

体重報告をしているのですが、問題があります。このクエリを使用して、倉庫に入っている重量を把握していますが、ある日付に取引がない場合、この日付は結果に表示されません。

SELECT  erp.MKPF.BUDAT AS Data,  
Sum( erp.MSEG.MENGE * erp.MARM.BRGEW ) as pes 

From erp.MKPF  
INNER Join erp.MSEG on erp.MKPF.MANDT = erp.MSEG.MANDT and erp.MKPF.MBLNR = erp.MSEG.MBLNR  
INNER Join erp.MARM on erp.MSEG.MANDT = erp.MARM.MANDT and erp.MSEG.MATNR = erp.MARM.MATNR And erp.MSEG.MEINS = erp.MARM.MEINH  
INNER JOIN erp.MARA on erp.MSEG.MANDT = erp.MARA.MANDT and erp.MSEG.MATNR = erp.MARA.MATNR

WHERE  erp.MKPF.MANDT = '100'  
and erp.MKPF.BUDAT >= '20120720' 
and erp.MKPF.BUDAT <= CONVERT(VARCHAR(8), GETDATE(), 112) -1 
and erp.MSEG.LGORT in ('1001','1069') 
and erp.MSEG.BWART In ('101','102','311','312') 
and erp.MSEG.WERKS = '1001' 
and erp.MARA.MTART in ('Z001','Z010','Z002','Z02E') 

GROUP BY erp.MKPF.BUDAT*

結果は次のようになります。

Data        PES
20120720    9999999.9999
20120721    9999999.8888
20120723    9999999.7777

そして、私はこれが必要です

Data        PES
20120720    9999999.9999
20120721    9999999.8888
20120722    0
20120723    999999.7777

誰か助けてくれませんか?

4

2 に答える 2

0

テーブルまたはビューを使用して対象の日付範囲を生成し、これによりクエリを実行します。次に、結果をこのビューに外部結合します。これは、クエリで動的に実行できます。たとえば、Oracleでは、「connectby」を使用してシリーズを生成できます。

create table my_summary(the_day date, pes number);
insert into my_summary values(to_date('20120720', 'yyyymmdd'),  9999999.9999);
insert into my_summary values(to_date('20120721', 'yyyymmdd'),  9999999.8888);
insert into my_summary values(to_date('20120723', 'yyyymmdd'),  9999999.7777);

SELECT d.the_day, NVL(s.pes, 0) AS pes
  FROM ( SELECT to_date('20120720', 'yyyymmdd') + level -1 AS the_day
           FROM dual CONNECT BY level <= 4) d
       LEFT OUTER JOIN my_summary s ON (d.the_day = s.the_day)
  ORDER BY 1

THE_DAY   PES
--------- ---
20-JUL-12 9999999.9999 
21-JUL-12 9999999.8888 
22-JUL-12   0 
23-JUL-12 9999999.7777 

他のrdbmsには、シリーズを生成する他のメソッドがあります。これには、必要な開始日とレコード数(上記の例では20120720および4)を知っている必要があります。

于 2012-07-23T12:26:33.610 に答える
0

すべてのおかげで、最終的に私はこれを行い、動作します

    SELECT 
    c.BUDAT AS DATA, 
    CASE When SAP.pes Is Null then '0'
    ELSE SAP.pes
    END
From
    erp.YSD_CALENDAR as c LEFT JOIN

    (SELECT 
    erp.MKPF.BUDAT,
    Sum(
    erp.MSEG.MENGE
     * erp.MARM.BRGEW ) as pes
     FROM
     erp.MKPF 

INNER Join erp.MSEG on erp.MKPF.MANDT = erp.MSEG.MANDT and erp.MKPF.MBLNR = erp.MSEG.MBLNR  

INNER Join erp.MARM on erp.MSEG.MANDT = erp.MARM.MANDT and erp.MSEG.MATNR = erp.MARM.MATNR And erp.MSEG.MEINS = erp.MARM.MEINH 

INNER JOIN erp.MARA on erp.MSEG.MANDT = erp.MARA.MANDT and erp.MSEG.MATNR = erp.MARA.MATNR 

WHERE 
    erp.MKPF.MANDT = '100' 
and erp.MKPF.BUDAT >= '20120720'
and erp.MSEG.LGORT in ('1001','1069')
and erp.MSEG.BWART In ('101','102','311','312')
and erp.MSEG.WERKS = '1001'
and erp.MARA.MTART in ('Z001','Z010','Z002','Z02E')
and erp.MSEG.SHKZG = 'S'
GROUP BY erp.MKPF.BUDAT
) SAP ON SAP.BUDAT = c.BUDAT 

WHERE 
c.BUDAT >= '20120720'
and c.BUDAT <=  CONVERT(VARCHAR(8), GETDATE(), 112)

GROUP BY c.BUDAT, SAP.pes
ORDER BY c.BUDAT
于 2012-08-02T12:08:10.783 に答える