1

我有一个带有 Oracle 投诉语法的 SQL 查询。它必须根据 MS SQL Server 语法进行更改。我不确定 LISTAGG 会如何变化。任何帮助深表感谢。下面是查询

select decode(isnull(c.CROSS_SALE_IND, 'F'), 'T', 'Cross Sale to ' + decode(isnull(c.cross_sale_mag_code, ''), '', isnull(c.external_place_ment, ' '), isnull(csvm.mag_name, ' ')), ' ') + decode(isnull(c.cross_sale_linked_campaign_id, 0), 0, '', (' Linked to Campaign ' + csc.mag_code + ' ' + csc.campaign_name + ' ' + decode(csc.special_issue_ind, 'T', convert(varchar, csc.from_date, 101), convert(varchar, csc.from_date, 101) + decode(nvl(csc.to_date, ''), '', '', ' - ') + convert(varchar, csc.to_date, 101)) + ' ' + convert(varchar, csc.from_issue) + decode(nvl(csc.from_issue, 0), 0, '', ' - ') + to_char(csc.to_issue))) + '  ' + ' ' + DECODE((
            select COUNT(CAMPAIGN_ID)
            from TBK_CAMPAIGN
            where CROSS_SALE_LINKED_CAMPAIGN_ID = 1
                and STATUS_CODE not in ('C', 'D')
            ), '0', '', (
            select 'Cross Sale From ' + LISTAGG(cross, '; ') WITHIN
            group (
                    order by cross
                    ) CROSS_SALE_MAG
            from (
                select ISNULL(CSVM.MAG_NAME, ' ') + ' ' + 'IC-' + C.MAG_CODE + ' ' + C.CAMPAIGN_NAME cross
                from TBK_CAMPAIGN C
                left join VWK_MAGAZINE CSVM on CSVM.MAG_CODE = C.MAG_CODE
                where C.CROSS_SALE_LINKED_CAMPAIGN_ID = 1
                    and STATUS_CODE not in ('C', 'D')
                )
            )) cross_sale_mag
from TBK_CAMPAIGN c
inner join TBK_CAMPAIGN_STATUS cs on c.status_code = cs.status_code
inner join VWK_MAGAZINE vm on vm.mag_code = c.mag_code
left join VWK_MAGAZINE csvm on csvm.mag_code = c.cross_sale_mag_code
left join TBK_CAMPAIGN csc on csc.campaign_id = c.cross_sale_linked_campaign_id
where c.campaign_id = 1

提前致谢。

4

0 回答 0