Sql server 如何优化SQL Server查询?
我有一张桌子,里面有一些会员和他们的名片。有3种独特类型的卡,即ADIB、ADCB和NBAD。一个人可以有多张卡,也可以有多张卡,即2张ADIB卡 下面是我的问题,我如何优化它Sql server 如何优化SQL Server查询?,sql-server,Sql Server,我有一张桌子,里面有一些会员和他们的名片。有3种独特类型的卡,即ADIB、ADCB和NBAD。一个人可以有多张卡,也可以有多张卡,即2张ADIB卡 下面是我的问题,我如何优化它 create table #cobrand(grp_number nvarchar(12), partner varchar(5)) insert into #cobrand select distinct c_grp_number grp_number, 'NBAD' partner from partnership
create table #cobrand(grp_number nvarchar(12), partner varchar(5))
insert
into #cobrand
select distinct c_grp_number grp_number, 'NBAD' partner from partnership_cards c where partner_name = 'NBAD'
and not exists (select grp_number from #cobrand t where c.c_grp_number = t.grp_number)
insert into #cobrand
select distinct c_grp_number grp_number, 'ADIB' partner from partnership_cards c where partner_name = 'ADIB'
and not exists (select grp_number from #cobrand t where c.c_grp_number = t.grp_number)
insert into #cobrand
select distinct c_grp_number grp_number, 'ADCB' partner from partnership_cards c where partner_name = 'ADCB'
and not exists (select grp_number from #cobrand t where c.c_grp_number = t.grp_number)
也许
INSERT INTO #cobrand
SELECT DISTINCT
c_grp_number AS grp_number,
partner_name AS partner
FROM partnership_cards c
WHERE partner_name IN ('NBAD','ADCB','ADIB')
AND NOT EXISTS(SELECT 1
FROM partnership_cards e
WHERE e.c_grp_number = c.c_grp_number
AND ((c.partner_name IN ('ADCB','ADIB') AND e.partner_name = 'NBAD')
OR (c.partner_name = 'ADIB' AND e.partner_name IN ('NBAD','ADCB')));
但是,如果没有样本数据,则无法进行测试。正如@Larnu所说,如果没有测试数据,则无法进行测试
INSERT INTO #cobrand
SELECT DISTINCT
c_grp_number
,c.partner_name
FROM
partnership_cards c
WHERE
c.partner_name IN ( 'NBAD', 'ADCB', 'ADIB' )
AND NOT EXISTS (
SELECT 1
FROM
#cobrand t
WHERE
c.c_grp_number = t.grp_number
AND c.partner_name = t.[partner]
) ;
我们在这里是为了帮助和回答问题,而不是做你的工作。我们不是一个自由编程的人service@Olearn亲爱的奥莱恩,我们在这里学习新事物、新技术。所以我想要一些新的方法来解决这个问题。这不仅仅是学习,不是我的工作。我们无法访问你的屏幕或数据库。现在的查询有什么问题,为什么你认为它需要优化?@Mazhar它工作得很好,但我需要一种方法,通过这种方法,它只能在一个查询中完成,而不是像我的方式。。这些是多个查询。@NishantKhanna你应该说,在这个问题中,不存在于这个查询中不会实现任何结果;在此插入之前,cobrand表是空的。OP没有提到cobrand表是空的。他们创建表的事实是一个很强的指示。表不包含任何关于创建的数据。我假设这是出于我们的目的,提供部分DDL来帮助OP:-这就是这个问题的问题,不是吗我们做了太多的假设。OP需要更清楚。这个答案包括card_status(卡片状态)列,以及原始文档中未提及的标志question@Larnu你能告诉我你是如何更改我发布的查询格式的吗?我突出显示了代码并按下了{}按钮。
select c_grp_number, partner_name from
(select c_grp_number, partner_name,
row_number() over (partition by c_grp_number order by partner_name desc)
as flag
from sameer_db..etihad_partnership_cards_temp
where card_status = 'Active' and partner_name in ('NBAD', 'ADIB', 'ADCB'))t
where flag = 1