2011-03-24 51 views
0

我是新的SQL Server 2008和tsql.I正在迁移我的查询从oracle到SQL Server.I在一个查询中遇到了这个问题,同时migrating.I不知道如何解决和是什么导致了这个错误从PLSQL传递时TSQL查询中的问题

该错误是多列是包含外部引用的聚合表达式 指定 。如果要汇总的 表达式包含 外部引用,则外部引用必须是表达式中引用的唯一列 。

感谢您的帮助。

完整的查询是

SELECT MAIN.ID_MAMUL, 
     MAIN.ID_BIRIM, 
     MAIN.MAMUL_NO, 
     MAIN.DS_MAMUL, 
     MAIN.DS_BIRIM, 
     SAYIM.MT_SAYIM, 
     SAYIM.DS_TARIH, 
     (SELECT Isnull (SUM (CASE 
           WHEN TRSH.GIRIS_TARIHI > Isnull (SAYIM.DS_TARIH, 
                 DBO.To_date ('01.01.2006' 
                 , 
                 'dd.mm.yyyy')) THEN 
           dbo.F_BIRIM_CEVRIM_KATSAYI (LUM.ID_MAMUL, 
           CRMB.ID_BIRIM, 
           LUM.ID_BIRIM) * 
           TRSD.MT_MIKTAR 
           ELSE 0 
          END), 0) 
     FROM TR_STOK_HEADER TRSH, 
       TR_STOK_DETAY TRSD, 
       CR_MAMUL_BARKOD CRMB, 
       LU_MAMUL LUM 
     WHERE TRSH.ID_STOK_HEADER = TRSD.ID_STOK_HEADER 
       AND TRSD.ID_MAMUL_BARKOD = CRMB.ID_MAMUL_BARKOD 
       AND CRMB.ID_MAMUL = LUM.ID_MAMUL 
       AND LUM.ID_MAMUL = MAIN.ID_MAMUL 
       AND TRSH.ID_DEPO = 327 
       AND TRSH.ID_STOK_HAREKET_TIPI IN (6, 15) 
       AND TRSH.AKTIF = 1 
       AND TRSD.VALID = 1)   MT_ALIS, 
     (SELECT Isnull (SUM (CASE 
           WHEN TRSH.GIRIS_TARIHI > Isnull (SAYIM.DS_TARIH, 
                 DBO.To_date ('01.01.2006' 
                 , 
                 'dd.mm.yyyy')) THEN 
           DBO.F_BIRIM_CEVRIM_KATSAYI (LUM.ID_MAMUL, 
           CRMB.ID_BIRIM, 
           LUM.ID_BIRIM) * 
           TRSD.MT_MIKTAR 
           ELSE 0 
          END), 0) 
     FROM TR_STOK_HEADER TRSH, 
       TR_STOK_DETAY TRSD, 
       CR_MAMUL_BARKOD CRMB, 
       LU_MAMUL LUM 
     WHERE TRSH.ID_STOK_HEADER = TRSD.ID_STOK_HEADER 
       AND TRSD.ID_MAMUL_BARKOD = CRMB.ID_MAMUL_BARKOD 
       AND CRMB.ID_MAMUL = LUM.ID_MAMUL 
       AND LUM.ID_MAMUL = MAIN.ID_MAMUL 
       AND TRSH.ID_DEPO = 327 
       AND TRSH.ID_STOK_HAREKET_TIPI = 8 
       AND TRSH.AKTIF = 1 
       AND TRSD.VALID = 1 
       AND TRSD.FL_DURUM = 0 
       AND TRSD.FL_BIREBIR_IADE = 0) MT_NOKTA_IADE, 
     (SELECT Isnull (SUM (CASE 
           WHEN TRSH.GIRIS_TARIHI > Isnull (SAYIM.DS_TARIH, 
                 DBO.To_date ('01.01.2006' 
                 , 
                 'dd.mm.yyyy')) THEN 
          DBO.F_BIRIM_CEVRIM_KATSAYI (LUM.ID_MAMUL, 
          CRMB.ID_BIRIM, 
          LUM.ID_BIRIM) * 
         Abs 
         ( 
         TRSD.MT_MIKTAR) 
         ELSE 0 
         END), 0) 
     FROM TR_STOK_HEADER TRSH, 
       TR_STOK_DETAY TRSD, 
       CR_MAMUL_BARKOD CRMB, 
       LU_MAMUL LUM 
     WHERE TRSH.ID_STOK_HEADER = TRSD.ID_STOK_HEADER 
       AND TRSD.ID_MAMUL_BARKOD = CRMB.ID_MAMUL_BARKOD 
       AND CRMB.ID_MAMUL = LUM.ID_MAMUL 
       AND LUM.ID_MAMUL = MAIN.ID_MAMUL 
       AND TRSH.ID_DEPO = 327 
       AND TRSH.ID_STOK_HAREKET_TIPI = 9 
       AND TRSH.AKTIF = 1 
       AND TRSD.VALID = 1 
       AND TRSD.FL_DURUM = 0 
       AND TRSD.FL_BIREBIR_IADE = 0) MT_PLASIYER_IADE, 
     (SELECT Isnull (SUM (CASE 
           WHEN TRSH.GIRIS_TARIHI > Isnull (SAYIM.DS_TARIH, 
                 DBO.To_date ('01.01.2006' 
                 , 
                 'dd.mm.yyyy')) THEN 
          DBO.F_BIRIM_CEVRIM_KATSAYI (LUM.ID_MAMUL, 
          CRMB.ID_BIRIM, 
          LUM.ID_BIRIM) * 
         Abs 
         ( 
         TRSD.MT_MIKTAR) 
         ELSE 0 
         END), 0) 
     FROM TR_STOK_HEADER TRSH, 
       TR_STOK_DETAY TRSD, 
       CR_MAMUL_BARKOD CRMB, 
       LU_MAMUL LUM 
     WHERE TRSH.ID_STOK_HEADER = TRSD.ID_STOK_HEADER 
       AND TRSD.ID_MAMUL_BARKOD = CRMB.ID_MAMUL_BARKOD 
       AND CRMB.ID_MAMUL = LUM.ID_MAMUL 
       AND LUM.ID_MAMUL = MAIN.ID_MAMUL 
       AND TRSH.ID_DEPO = 327 
       AND TRSH.ID_STOK_HAREKET_TIPI = 8 
       AND TRSH.AKTIF = 1 
       AND TRSD.VALID = 1 
       AND TRSD.FL_DURUM = 0 
       AND TRSD.FL_BIREBIR_IADE = 1) MT_NOKTA_BIREBIR_IADE, 
     (SELECT Isnull (SUM (CASE 
           WHEN TRSH.GIRIS_TARIHI > Isnull (SAYIM.DS_TARIH, 
                 DBO.To_date ('01.01.2006' 
                 , 
                 'dd.mm.yyyy')) THEN 
          DBO.F_BIRIM_CEVRIM_KATSAYI (LUM.ID_MAMUL, 
          CRMB.ID_BIRIM, 
          LUM.ID_BIRIM) * 
         Abs 
         ( 
         TRSD.MT_MIKTAR) 
         ELSE 0 
         END), 0) 
     FROM TR_STOK_HEADER TRSH, 
       TR_STOK_DETAY TRSD, 
       CR_MAMUL_BARKOD CRMB, 
       LU_MAMUL LUM 
     WHERE TRSH.ID_STOK_HEADER = TRSD.ID_STOK_HEADER 
       AND TRSD.ID_MAMUL_BARKOD = CRMB.ID_MAMUL_BARKOD 
       AND CRMB.ID_MAMUL = LUM.ID_MAMUL 
       AND LUM.ID_MAMUL = MAIN.ID_MAMUL 
       AND TRSH.ID_DEPO = 327 
       AND TRSH.ID_STOK_HAREKET_TIPI = 5 
       AND TRSH.AKTIF = 1 
       AND TRSD.VALID = 1 
       AND TRSD.FL_DURUM = 0 
       AND TRSD.FL_BIREBIR_IADE = 0) MT_SATIS, 
     MAIN.MT_STOK 
FROM (SELECT MA.ID_MAMUL, 
       MA.MAMUL_NO, 
       MA.DS_MAMUL, 
       BR.ID_BIRIM, 
       BR.DS_BIRIM_KISA DS_BIRIM, 
       (DBO.F_BIRIM_CEVRIM_KATSAYI (MA.ID_MAMUL, MB.ID_BIRIM, 
       MA.ID_BIRIM) * 
       DS.MT_MIKTAR) MT_STOK 
     FROM CR_DEPO_STOK DS, 
       CR_MAMUL_BARKOD MB, 
       LU_MAMUL MA, 
       LU_BIRIM BR 
     WHERE DS.ID_MAMUL_BARKOD = MB.ID_MAMUL_BARKOD 
       AND MB.ID_MAMUL = MA.ID_MAMUL 
       AND MA.ID_BIRIM = BR.ID_BIRIM 
       AND DS.ID_DEPO = 327 
       AND DS.FL_DURUM = 0) MAIN 
     LEFT JOIN (SELECT MA.ID_MAMUL, 
         SS.DS_TARIH, 
         SUM (DBO.F_BIRIM_CEVRIM_KATSAYI (MA.ID_MAMUL, 
           MB.ID_BIRIM, 
           MA.ID_BIRIM) 
           * 
           SD.MT_SAYIM) MT_SAYIM 
        FROM (SELECT S.ID_DEPO, 
           B.ID_MAMUL, 
           MAX (S.DS_TARIH) DS_TARIH 
          FROM TR_STOK_SAYIM S, 
           TR_STOK_SAYIM_DETAY D, 
           CR_MAMUL_BARKOD B 
          WHERE S.ID_STOK_SAYIM = D.ID_STOK_SAYIM 
           AND D.ID_MAMUL_BARKOD = B.ID_MAMUL_BARKOD 
           AND D.FL_ONAY = 1 
           AND S.ID_DEPO = 327 
          GROUP BY S.ID_DEPO, 
            B.ID_MAMUL) SON_SAY, 
         TR_STOK_SAYIM SS, 
         TR_STOK_SAYIM_DETAY SD, 
         CR_MAMUL_BARKOD MB, 
         LU_MAMUL MA 
        WHERE SS.ID_STOK_SAYIM = SD.ID_STOK_SAYIM 
         AND SD.ID_MAMUL_BARKOD = MB.ID_MAMUL_BARKOD 
         AND MB.ID_MAMUL = MA.ID_MAMUL 
         AND SS.ID_DEPO = 327 
         AND SS.ID_DEPO = SON_SAY.ID_DEPO 
         AND SS.DS_TARIH = SON_SAY.DS_TARIH 
         AND MA.ID_MAMUL = SON_SAY.ID_MAMUL 
         AND SD.FL_ONAY = 1 
        GROUP BY MA.ID_MAMUL, 
          SS.DS_TARIH) SAYIM 
     ON MAIN.ID_MAMUL = SAYIM.ID_MAMUL 
ORDER BY 3, 
      2 
+2

尝试将错误缩小到较小的部分,这对于解析人类来说太过分了 – Andomar 2011-03-24 09:13:17

回答

1

我永远不会写这么长的查询,因为它是多一个人来解析由@Andomar指出。如果您逐个浏览连接的不同“部分”,您可能会发现错误。