2016-08-03 1 views
0

문장에서 설명하기 쉽지 않은 상황이 발생했습니다. 여기서는 전체 시나리오를 제공하겠습니다.두 표 모두에서 1 열 그룹화를 기반으로 두 테이블을 결합하는 방법

I처럼 한 결과를 설정 한 다음 : - 그것은 예 3159398,4622903 거짓 들어 jil_equipment_id, relationship_name, cell_group ..의 그룹에서 header_equipment_id 발를 도시

enter image description here

한 그룹에.

다른 결과 세트는 아래와 같습니다

,이

enter image description here

당신이 명확하게 통지하는 경우, 당신은 같은를 찾을 수를 prc_type_name 내가 3 열, 즉 Is_Applicable_Price, prc_content_rid를 업데이트 할 테이블입니다 header_equipment_id 여기에 있습니다. 위에 나온 결과로 그룹화하면 3 가지 다른 그룹을 찾을 수 있습니다. 그러나 그 3 개의 그룹 중 하나의 그룹은 빨간색입니다. 다른 그룹에 속하기 때문에 빨간색입니다. cell_group/relationship_name. **

  • 노란색과 녹색

    이 시나리오를 통과하고 빨간색, 파란색은 실패한다.

**

나는 열을 Is_Applicable_Price, prc_content_rid, prc_type_name를 업데이트 할 경우 header_equipment_id (들) 같은 cell_grouprelationship_name에서 가을의 그룹.

그래서 최종 결과 집합은 다음과 같을 것 -

enter image description here

어떤 입력을 가능하면 저를 도와주세요. 그것은 하나의 쿼리가 작동하지 않는다는 것을 알고있는 상황입니다. 하지만 변환을 위해 여러 개의 Temp 테이블이 있어야합니다. 그러나 이것은 내가 간 가장 짧은 것입니다.

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

아니요, 고정되어 있지 않습니다. ( –

관련 문제