如何加入两个

如何加入两个

问题描述:

我想出的情况这是不容易的一句话来解释,所以我会继续前进,这里给出完整的方案表根据1列的分组两个表。如何加入两个

我已经一个结果集像下面: -

enter image description here

它显示header_equipment_id(多个)一组jil_equipment_id,relationship_name,cell_group ..在例如3159398,4622903谎言在一个组中。

其他结果集如下,这就是我要更新3列即Is_Applicable_Price,prc_content_rid表,prc_type_name

enter image description here

如果您发现清楚了,你会发现同样的header_equipment_id列在这里。如果您将它与上面找到的结果进行分组,您会找到3个不同的组。但是这些出3组,一组是红色的,这是因为它们属于不同的cell_group/relationship_name是红色的。

**

  • 黄色和绿色传递场景和红,蓝的失败。

**

我想更新的列Is_Applicable_Price,prc_content_rid,prc_type_name如果header_equipment_id(S)同cell_grouprelationship_name秋天的集团。

所以最终的结果集看起来像下面 -

enter image description here

请帮我任何输入如果可能的话。这是一种情况,我知道一个单一的查询将无法正常工作。但我将需要有多个临时表进行转换。但这是我遇到的最短的。

我正在使用Microsoft sql server 2012.

请帮忙。即使是一个小提示对我来说也是很有帮助的。提前致谢。

+0

您是否有规则来决定Is_Applicable_Price,prc_content_rid,prc_type_name的更新值? –

看来,2台有唯一的共同点是,cell_group可以有header_equipment_id的一行或多行。如果我们可以根据header_equipment_id生成一个唯一的值,那么我们可以在这个值上加入2个表。注意我已经使用了一个简单的部门,您可能希望检查此方法是否足够满足您的目的。

/*create table a 
    (jil_equimentid int,relationship_name varchar(20),header_equipment_id int, 
    smart_equipment_id int,cell_group int,new_price_flag int,is_applicable_price int,prc_content_rid int,prc_type_name varchar(20)) 
    truncate table a 
    insert into a values 
    (1282977,'default',3159398,1282977,3,1,1,106347924,'New Price'), 
    (1282977,'default',4622903,1262578,3,1,1,106347924,'New Price'), 
    (1282977,'default',1659861,1282977,6,1,1,106347925,'New Price'), 
    (1282977,'default',4622904,1282977,6,1,1,106347925,'New Price') 
    go 

drop table t 
go 
create table t 
(jil_equimentid int,relationship_name varchar(20),header_equipment_id int, 
smart_equipment_id int,cell_group int,new_price_flag int,is_applicable_price int,prc_content_rid int,prc_type_name varchar(20)) 
truncate table t 
insert into t values 
(1282977,'128297711111 default',4622903,1282977,1,1,null,null,null), 
(1282977,'128297711211 default',3159398,1262578,2,1,null,null,null), 
(1282977,'128297712111 default',4622904,1282977,4,1,null,null,null), 
(1282977,'128297712211 default',1659861,1282977,5,1,null,null,null), 
(1282977,'128297711101 default',3159398,1262578,1,1,null,null,null), 
(1282977,'128297711101 default',4622903,1282977,1,1,null,null,null), 
(1282977,'default'    ,3159398,1262578,2,1,null,null,null), 
(1282977,'default'    ,4622903,1282977,2,1,null,null,null), 
(1282977,'128297711101 default',1659861,1262577,3,1,null,null,null), 
(1282977,'128297711101 default',4622904,1282977,3,1,null,null,null), 
(1282977,'default'    ,1659861,1262577,4,1,null,null,null), 
(1282977,'default'    ,4622904,1262577,4,1,null,null,null) 
*/ 

DROP TABLE #TEMPA; 
;WITH CTE AS 
(SELECT a.cell_group, 
     sum(a.header_equipment_id/10000000.0000) uniqueval 
from a 
group by a.cell_group 
) 
SELECT DISTINCT CTE.UNIQUEVAL ,IS_APPLICABLE_PRICE ,PRC_CONTENT_RID ,PRC_TYPE_NAME 
INTO #TEMPA 
FROM CTE 
JOIN A ON A.CELL_GROUP = CTE.CELL_GROUP 

;WITH CTE AS 
(
SELECT t.relationship_name,t.cell_group, 
     sum(t.header_equipment_id/10000000.0000) uniqueval 
from t 
group by t.relationship_name,t.cell_group having count(*) > 1 
) 
SELECT T.*,CTE.UNIQUEVAL,ta.* 
FROM CTE 
JOIN T ON T.RELATIONSHIP_NAME = CTE.RELATIONSHIP_NAME AND T.CELL_GROUP = CTE.CELL_GROUP 
join #tempa ta on ta.uniqueval = cte.uniqueval 
+0

嘿,relationship_name和cell_group可以在表中不同,所以不能以它们为基础加入...! –

+0

每个单元组最多有2行? –

+0

不是,它不是固定的:( –