【发布时间】:2021-04-29 02:57:31
【问题描述】:
我有一个要求,我必须检查表中是否已经存在营业日期的记录,然后我需要从 select 语句中更新该营业日期的值,否则我必须从选择语句。以下是我目前仅插入的完整查询:
INSERT INTO
gstl_calculated_daily_fee(business_date,fee_type,fee_total,range_id,total_band_count)
select
@tlf_business_date,
'FEE_LOCAL_CARD',
SUM(C.settlement_fees),
C.range_id,
Count(1)
From
(
select
*
from
(
select
rowNumber = @previous_mada_switch_fee_volume_based_count + (ROW_NUMBER() OVER(PARTITION BY DATEPART(MONTH, x_datetime) ORDER BY x_datetime)),
tt.x_datetime
from gstl_trans_temp tt where (message_type_mapping = '0220') and card_type ='GEIDP1' and response_code IN('00','10','11') and tran_amount_req >= 5000 AND merchant_type NOT IN(5542,5541,4829)
) A
CROSS APPLY
(
select
rtt.settlement_fees,
rtt.range_id
From gstl_mada_local_switch_fee_volume_based rtt
where A.rowNumber >= rtt.range_start
AND (A.rowNumber <= rtt.range_end OR rtt.range_end IS NULL)
) B
) C
group by CAST(C.x_datetime AS DATE),C.range_id
我曾尝试使用 if exists,但无法满足上述完整查询。
if exists (select
business_date
from gstl_calculated_daily_fee
where
business_date = @tlf_business_date)
UPDATE gstl_calculated_daily_fee
SET fee_total = @total_mada_local_switch_fee_low
WHERE fee_type = 'FEE_LOCAL_CARD'
AND business_date = @tlf_business_date
else
INSERT INTO
请帮忙。
【问题讨论】:
-
您也许可以简化您的问题。您的大部分 SQL 代码与您的实际问题无关。
-
你需要一个
MERGEstatement -
@astentx 这不会显示
MERGE与连接。会给出答案
标签: sql sql-server sql-update sql-insert