2016-08-03 67 views
0

我想出的情況這是不容易的一句話來解釋,所以我會繼續前進,這裏給出完整的方案表根據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的更新值? –

回答

0

看來,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

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