2012-10-16 87 views
0

我得到了下面的查询:SQL UNION语句

SELECT 
     ep_101.cd_hfdmapnr AS Dossiernummer, 
     SUM(ep_102.id_fhmbdlv) AS Kosten 

    FROM ep_101 

    INNER JOIN et_101 ON ep_101.cd_hfdmapnr = et_101.cd_hfdmapnr 
    INNER JOIN ep_102 ON ep_101.cd_hfdmapnr = ep_102.cd_hfdmapnr 

    WHERE ep_101.cd_mapkverw = 0 
    AND ep_102.cd_bkcode = '000010' 
    AND et_101.opdrachtgever1 = '05354605' 

    GROUP BY ep_101.cd_hfdmapnr 

    UNION 

    SELECT 
     ep_101.cd_hfdmapnr AS Dossiernummer, 
     SUM(ep_102.id_fhmbdlv) AS GriffieKosten 

    FROM ep_101 

    INNER JOIN et_101 ON ep_101.cd_hfdmapnr = et_101.cd_hfdmapnr 
    INNER JOIN ep_102 ON ep_101.cd_hfdmapnr = ep_102.cd_hfdmapnr 

    WHERE ep_101.cd_mapkverw = 0 
    AND ep_102.cd_bkcode = '000020' 
    AND et_101.opdrachtgever1 = '05354605' 

    GROUP BY ep_101.cd_hfdmapnr 

虽然结果只给回Dossiernummer & Kosten我怎样才能重新它使“Griffiekosten”也显示?因为我的想法....

回答

1

如果你真的需要显示它在两列:

SELECT 
    ep_101.cd_hfdmapnr AS Dossiernummer, 
    SUM(case when ep_102.cd_bkcode = '000010' then ep_102.id_fhmbdlv else 0 end) AS Kosten, 
    SUM(case when ep_102.cd_bkcode = '000020' then ep_102.id_fhmbdlv else 0 end) AS GriffieKosten 
FROM ep_101 
    INNER JOIN et_101 ON ep_101.cd_hfdmapnr = et_101.cd_hfdmapnr 
    INNER JOIN ep_102 ON ep_101.cd_hfdmapnr = ep_102.cd_hfdmapnr 
WHERE ep_101.cd_mapkverw = 0 
    AND ep_102.cd_bkcode in ('000010', '000020') 
    AND et_101.opdrachtgever1 = '05354605' 
GROUP BY ep_101.cd_hfdmapnr 
+0

修复那么你的'组by'条款。 –

+0

工作感谢ALLOT! –

0

它们显示!
当您使用UNION时,列名将根据UNION中的名字排序,在此情况下为:Dossiernummer & Kosten。

只是一个小问题,你确定要使用UNION吗? Kosten和Griffiekosten是一样的吗?如果不是那么UNION是错误的路要走。

假设他们是不同类型的值,但您希望结果显示每个Dossiernummer,那么您正在查看JOIN(在Dossiernummer上)。

线沿线的东西:

SELECT Isnull(T1.DOSSIERNUMMER, T2.DOSSIERNUMMER) AS Dossiernummer, 
     T1.KOSTEN, 
     T2.GRIFFIEKOSTEN 
FROM (SELECT EP_101.CD_HFDMAPNR  AS Dossiernummer, 
       Sum(EP_102.ID_FHMBDLV) AS Kosten 
     FROM EP_101 
       INNER JOIN ET_101 
         ON EP_101.CD_HFDMAPNR = ET_101.CD_HFDMAPNR 
       INNER JOIN EP_102 
         ON EP_101.CD_HFDMAPNR = EP_102.CD_HFDMAPNR 
     WHERE EP_101.CD_MAPKVERW = 0 
       AND EP_102.CD_BKCODE = '000010' 
       AND ET_101.OPDRACHTGEVER1 = '05354605' 
     GROUP BY EP_101.CD_HFDMAPNR)T1 
     FULL OUTER JOIN (SELECT EP_101.CD_HFDMAPNR  AS Dossiernummer, 
           Sum(EP_102.ID_FHMBDLV) AS GriffieKosten 
         FROM EP_101 
           INNER JOIN ET_101 
             ON EP_101.CD_HFDMAPNR = 
              ET_101.CD_HFDMAPNR 
           INNER JOIN EP_102 
             ON EP_101.CD_HFDMAPNR = 
              EP_102.CD_HFDMAPNR 
         WHERE EP_101.CD_MAPKVERW = 0 
           AND EP_102.CD_BKCODE = '000020' 
           AND ET_101.OPDRACHTGEVER1 = '05354605' 
         GROUP BY EP_101.CD_HFDMAPNR)T2 
        ON T1.DOSSIERNUMMER = T2.DOSSIERNUMMER 
+0

走什么路? 2首先在bkcode 000010上进行sql查询过滤,另一个在000020上进行过滤,这样就会有不同的结果,会给出2个完全不同的结果,那么结果如何呢? –