需要帮助将此外部转换为应用于左联接

问题描述 投票:0回答:1

过去几天我一直在为此苦苦挣扎。我正在尝试使用以下SQL查询,该查询在SQL 2008上用于SQL 2000服务器。

发生问题,SQL 2000不支持外部apply命令。是否可以转换我的查询,使其适用于SQL 2000服务器?

SELECT
                        [Ta_KIB_B].*, (
                            CASE
                            WHEN NewKondisi IS NULL THEN
                                Kondisi
                            ELSE
                                NewKondisi
                            END
                        ) AS lastKondisi,

                        (
                            CASE
                            WHEN KondisiSebelumTA2018 IS NULL THEN
                                Kondisi
                            ELSE
                                KondisiSebelumTA2018
                            END
                        ) AS KondisiSebelumTA2018,


                        (
                            SELECT
                                SUM (Harga) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat = 2
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen > '2017-12-31'
                        ) AS Kapitalisasi_2018,


                        (
                            SELECT
                                COUNT(*) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat = 2
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen > '2017-12-31'
                        ) AS Count_Kapitalisasi_2018,

                        (
                            SELECT
                                SUM (Harga) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat IN (2, 21)
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen <= '2017-12-31'
                        ) AS Koreksi_Tambah_Harga_SD_2017,

                        (
                            SELECT
                                SUM (Harga) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat IN (7, 23)
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen <= '2017-12-31'
                        ) AS Koreksi_Kurang_Harga_SD_2017,

                        (
                            SELECT
                                SUM (Harga) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat = 21
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen > '2017-12-31'
                        ) AS Koreksi_Tambah_Harga_2018,

                        (
                            SELECT
                                SUM (Harga) AS Rharga
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIBBR].Kd_Riwayat IN (7, 23)
                            AND [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Tgl_Dokumen > '2017-12-31'
                        ) AS Koreksi_Kurang_Harga_2018,

                        LastUpdate,

                        TanggalPerubahanKondisiTerakhir


                    FROM

                        [Ta_KIB_B] OUTER APPLY (
                            SELECT
                                TOP 1 [Ta_KIBBR].Kondisi AS NewKondisi
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Kd_Riwayat = 1 
                            AND [Ta_KIBBR].Tgl_Dokumen <= '2018-12-31'
                            ORDER BY
                                [Ta_KIBBR].Tgl_Dokumen DESC
                        ) AS bb



                        OUTER APPLY (   
                            SELECT
                                TOP 1 [Ta_KIBBR].Kondisi AS KondisiSebelumTA2018
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Kd_Riwayat = 1
                            AND [Ta_KIBBR].Tgl_Dokumen <= '2017-12-31'
                            ORDER BY
                                [Ta_KIBBR].Tgl_Dokumen DESC
                        ) AS cc

                        OUTER APPLY (   
                            SELECT
                                TOP 1 [Ta_KIBBR].Tgl_Dokumen AS TanggalPerubahanKondisiTerakhir
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND Kd_Riwayat = 1 
                            AND [Ta_KIBBR].Tgl_Dokumen <= '2018-12-31'
                            ORDER BY
                                [Ta_KIBBR].Tgl_Dokumen DESC
                        ) AS dd


                        OUTER APPLY (
                            SELECT
                                TOP 1 [Ta_KIBBR].Tgl_Dokumen AS LastUpdate
                            FROM
                                [Ta_KIBBR]
                            WHERE
                                [Ta_KIB_B].Kd_Bidang = [Ta_KIBBR].Kd_Bidang
                            AND [Ta_KIB_B].Kd_Unit = [Ta_KIBBR].Kd_Unit
                            AND [Ta_KIB_B].Kd_Sub = [Ta_KIBBR].Kd_Sub
                            AND [Ta_KIB_B].Kd_UPB = [Ta_KIBBR].Kd_UPB
                            AND [Ta_KIB_B].Kd_Aset1 = [Ta_KIBBR].Kd_Aset1
                            AND [Ta_KIB_B].Kd_Aset2 = [Ta_KIBBR].Kd_Aset2
                            AND [Ta_KIB_B].Kd_Aset3 = [Ta_KIBBR].Kd_Aset3
                            AND [Ta_KIB_B].Kd_Aset4 = [Ta_KIBBR].Kd_Aset4
                            AND [Ta_KIB_B].Kd_Aset5 = [Ta_KIBBR].Kd_Aset5
                            AND [Ta_KIB_B].No_Register = [Ta_KIBBR].No_Register
                            AND [Ta_KIBBR].Tgl_Dokumen <= '2019-12-31' 
                            ORDER BY
                                [Ta_KIBBR].Tgl_Dokumen DESC
                        ) AS ee


任何帮助表示感谢,谢谢

sql-server sql-server-2008 sql-server-2000
1个回答
0
投票

您可以将外部应用应用于相关子查询。

 SELECT [ta_kib_b].*,
       ( CASE
           WHEN newkondisi IS NULL THEN kondisi
           ELSE newkondisi
         END ) AS LASTKONDISI
FROM   (SELECT [ta_kib_b].*,
               (SELECT TOP 1 [ta_kibbr].kondisi AS NEWKONDISI
                FROM   [ta_kibbr]
                WHERE  [ta_kib_b].kd_bidang = [ta_kibbr].kd_bidang
                       AND [ta_kib_b].kd_unit = [ta_kibbr].kd_unit
                       AND [ta_kib_b].kd_sub = [ta_kibbr].kd_sub
                       AND [ta_kib_b].kd_upb = [ta_kibbr].kd_upb
                       AND [ta_kib_b].kd_aset1 = [ta_kibbr].kd_aset1
                       AND [ta_kib_b].kd_aset2 = [ta_kibbr].kd_aset2
                       AND [ta_kib_b].kd_aset3 = [ta_kibbr].kd_aset3
                       AND [ta_kib_b].kd_aset4 = [ta_kibbr].kd_aset4
                       AND [ta_kib_b].kd_aset5 = [ta_kibbr].kd_aset5
                       AND [ta_kib_b].no_register = [ta_kibbr].no_register
                       AND kd_riwayat = 1
                       AND [ta_kibbr].tgl_dokumen <= '2018-12-31'
                ORDER  BY [ta_kibbr].tgl_dokumen DESC) AS newkondisi
        FROM   ta_kib_b) ta_kib_b  
© www.soinside.com 2019 - 2024. All rights reserved.