【发布时间】:2020-06-05 03:33:39
【问题描述】:
我的 SQL 查询有问题:
消息 8156,第 16 层,状态 1,第 77 行
为“d”多次指定了“flag_valid”列
代码:
SELECT
d.ID_TEMP
,LEFT(d.tanggal, 4) AS year
,SUBSTRING(d.tanggal, 5, 2) AS bulan
,RIGHT(d.tanggal, 2) AS tanggal
,d.jenis_rekening
,d.status_penerima
,d.kategori_penerima
,d.status_pembayar
,d.kategori_pembayar
,d.hubungan_keuangan
,d.sandi_negara
,d.jenis_valuta
,d.nilai_transaksi
,d.in_out
,d.tujuan_transaksi
,d.kode_cabang
,flag_transaksi = CASE WHEN d.jenis_rekening = '3C'
AND CAST(d.nilai_transaksi2 AS FLOAT) <= CAST('10000' AS FLOAT) THEN 'K' WHEN SUBSTRING(d.kode_swift_bank_pengirim, 5, 2) = 'ID'
AND SUBSTRING(d.kode_swift_bank_penerima, 5, 2) = 'ID'
AND d.in_out = '1' THEN 'K' WHEN d.jenis_rekening = '3C'
AND CAST(d.nilai_transaksi2 AS FLOAT) > CAST('10000' AS FLOAT) THEN 'L' ELSE 'K' END
,d.nama_penerima
,d.jenis_no_identifikasi_penerima
,d.no_identifikasi_penerima
,d.nama_pembayar
,d.jenis_no_identifikasi_pembayar
,d.no_identifikasi_pembayar
,d.kode_swift_bank_pengirim
,d.kode_swift_bank_penerima
,d.detail_transaksi
,d.tujuan_transaksi_2015
,d.dokumen
,d.gol_debitur_penerima
,d.gol_debitur_pembayar
,d.dokumen_pendukung_lld1
,d.periode
,d.kurs_asli
,d.kurs_dollar
,d.flag_kurs
,d.flag_valid
,d.Jenis_Rekening_lld2
,d.Jenis_Valuta_lld2
,d.Sandi_Negara_lld2
,d.sandi_bank
,mp.IDPosisi
FROM
(SELECT
c.ID_TEMP
,c.kode_cabang
,c.tanggal
,c.jenis_rekening
,c.status_penerima
,c.kategori_penerima
,c.status_pembayar
,c.kategori_pembayar
,c.hubungan_keuangan
,c.sandi_negara
,c.jenis_valuta
,c.nilai_transaksi
,c.in_out
,c.tujuan_transaksi
,c.tujuan_transaksi_2015
,c.nama_penerima
,c.jenis_no_identifikasi_penerima
,c.nama_pembayar
,c.jenis_no_identifikasi_pembayar
,c.kode_swift_bank_pengirim
,c.nomor_ft
,c.f_id
,c.negara_depository
,c.no_identifikasi_penerima
,c.jenis_identifikasi_pembayar
,c.no_identifikasi_pembayar
,c.kode_swift_bank_penerima
,c.detail_transaksi
,c.dokumen
,c.gol_debitur_penerima
,c.gol_debitur_pembayar
,c.dokumen_pendukung_lld1
,c.periode
,c.kurs_asli
,c.kurs_dollar
,c.flag_kurs
,c.flag_valid
,nilai_transaksi2 = CASE WHEN c.jenis_rekening = '3C'
AND c.jenis_valuta <> 'USD'
AND c.flag_kurs = '1' THEN ROUND(ROUND(CAST(c.nilai_transaksi AS FLOAT) * CAST(c.kurs_asli AS FLOAT), 2) / CAST(c.kurs_dollar AS FLOAT), 2) WHEN c.jenis_rekening = '3C'
AND c.jenis_valuta <> 'USD'
AND c.flag_kurs = '0' THEN '0' WHEN c.jenis_rekening = '3C'
AND c.jenis_valuta = 'USD'
AND c.flag_kurs = '0' THEN '0' WHEN c.jenis_rekening <> '3C'
AND c.flag_kurs = '0' THEN '0' ELSE c.nilai_transaksi END
,c.flag_valid
,c.Jenis_Rekening_lld2
,c.Jenis_Valuta_lld2
,c.Sandi_Negara_lld2
,c.sandi_bank
FROM (
SELECT b.ID_TEMP
,b.kode_cabang
,b.tanggal
,b.jenis_rekening
,b.status_penerima
,b.kategori_penerima
,b.status_pembayar
,b.kategori_pembayar
,b.hubungan_keuangan
,b.sandi_negara
,b.jenis_valuta
,b.nilai_transaksi
,b.in_out
,b.tujuan_transaksi
,b.tujuan_transaksi_2015
,b.nama_penerima
,b.jenis_no_identifikasi_penerima
,b.nama_pembayar
,b.jenis_no_identifikasi_pembayar
,b.kode_swift_bank_pengirim
,b.nomor_ft
,b.f_id
,b.negara_depository
,b.no_identifikasi_penerima
,b.jenis_identifikasi_pembayar
,b.no_identifikasi_pembayar
,b.kode_swift_bank_penerima
,b.detail_transaksi
,b.dokumen
,b.gol_debitur_penerima
,b.gol_debitur_pembayar
,b.dokumen_pendukung_lld1
,b.periode
,b.kurs_asli
,b.kurs_dollar
,b.flag_valid
,flag_kurs = CASE WHEN b.kurs_asli <> '0'
AND b.kurs_dollar <> '0' THEN '1' ELSE '0' END
,b.Jenis_Rekening_lld2
,b.Jenis_Valuta_lld2
,b.Sandi_Negara_lld2
,b.sandi_bank
FROM (
SELECT a.ID_TEMP
,a.kode_cabang
,a.tanggal
,a.jenis_rekening
,a.status_penerima
,a.kategori_penerima
,a.status_pembayar
,a.kategori_pembayar
,a.hubungan_keuangan
,a.sandi_negara
,a.jenis_valuta
,a.nilai_transaksi
,a.in_out
,a.tujuan_transaksi
,a.tujuan_transaksi_2015
,a.nama_penerima
,a.jenis_no_identifikasi_penerima
,a.nama_pembayar
,a.jenis_no_identifikasi_pembayar
,a.kode_swift_bank_pengirim
,a.nomor_ft
,a.f_id
,a.negara_depository
,a.no_identifikasi_penerima
,a.jenis_identifikasi_pembayar
,a.no_identifikasi_pembayar
,a.kode_swift_bank_penerima
,a.detail_transaksi
,a.dokumen
,a.gol_debitur_penerima
,a.gol_debitur_pembayar
,a.dokumen_pendukung_lld1
,a.periode
,a.flag_valid
,a.Jenis_Rekening_lld2
,a.Jenis_Valuta_lld2
,a.Sandi_Negara_lld2
,a.sandi_bank
,ISNULL(mk.kurs, 0) AS kurs_asli
,ISNULL(mk2.kurs, 0) AS kurs_dollar
FROM (
SELECT ttt.ID_TEMP
,ttt.kode_cabang
,ttt.tanggal
,ttt.jenis_rekening
,ttt.status_penerima
,ttt.kategori_penerima
,ttt.status_pembayar
,ttt.kategori_pembayar
,ttt.hubungan_keuangan
,ttt.sandi_negara
,ttt.jenis_valuta
,ttt.nilai_transaksi
,ttt.in_out
,ttt.tujuan_transaksi
,ttt.tujuan_transaksi_2015
,ttt.nama_penerima
,ttt.jenis_no_identifikasi_penerima
,ttt.nama_pembayar
,ttt.jenis_no_identifikasi_pembayar
,ttt.kode_swift_bank_pengirim
,ttt.nomor_ft
,ttt.f_id
,ttt.negara_depository
,ttt.no_identifikasi_penerima
,ttt.jenis_identifikasi_pembayar
,ttt.no_identifikasi_pembayar
,ttt.kode_swift_bank_penerima
,ttt.detail_transaksi
,ttt.dokumen
,ttt.gol_debitur_penerima
,ttt.gol_debitur_pembayar
,ttt.dokumen_pendukung_lld1
,RIGHT('00' + CAST(MONTH(CAST(ttt.tanggal AS SMALLDATETIME)) AS VARCHAR(2)), 2) + '' + CAST(YEAR(CAST(ttt.tanggal AS SMALLDATETIME)) AS VARCHAR(4)) AS periode
,ttt.flag_valid
,mmll.Jenis_Rekening_lld2
,mmll.Jenis_Valuta_lld2
,mmll.Sandi_Negara_lld2
,'153' + ttt.kode_cabang AS sandi_bank
FROM TRX_TRANSAKSI_TEMP2 ttt
LEFT JOIN MST_MAPPING_LLD1_LLD2 mmll
ON ttt.jenis_rekening = mmll.Jenis_Rekening_lld1
AND ttt.jenis_valuta = mmll.Jenis_Valuta_lld1
AND ttt.sandi_negara = mmll.Sandi_Negara_lld1
WHERE Flag_Process = '0'
AND MONTH(CAST(ttt.tanggal AS SMALLDATETIME)) = '02'
AND YEAR(CAST(ttt.tanggal AS SMALLDATETIME)) = '2020'
) a
LEFT JOIN MST_KURS mk
ON mk.periode = a.periode
AND mk.sandi_valuta = a.jenis_valuta
LEFT JOIN MST_KURS mk2
ON mk2.periode = a.periode
AND mk2.sandi_valuta = 'USD'
LEFT JOIN MST_POSISI mp
ON a.Jenis_Rekening_lld2 = mp.Jenis_Rekening
AND a.Jenis_Valuta_lld2 = mp.Jenis_Valuta
AND a.Sandi_Negara_lld2 = mp.Sandi_Negara
AND a.sandi_bank = mp.Sandi_Bank
) b
) c
) d
LEFT JOIN MST_POSISI mp
ON d.Jenis_Rekening_lld2 = mp.Jenis_Rekening
AND d.Jenis_Valuta_lld2 = mp.Jenis_Valuta
AND d.Sandi_Negara_lld2 = mp.Sandi_Negara
AND d.sandi_bank = mp.Sandi_Bank
WHERE flag_valid = 'Y'
AND (
kode_cabang = 'ID0010002'
OR d.kode_cabang IN (
'ID0010002'
,'ID0010204'
)
)
【问题讨论】:
标签: sql-server join select