【问题标题】:How to join two tables based on Grouping of 1 column in both the tables如何根据两个表中的 1 列分组连接两个表
【发布时间】:2016-08-03 07:53:09
【问题描述】:

我遇到了一个不容易用句子解释的情况,所以我会继续在这里给出完整的场景。

我有一个结果集,如下所示:-

它显示 header_equipment_id(s) 在一组 jil_equipment_id,relationship_name,cell_group 中。例如 3159398,4622903 位于一组中。

下面给出了另一个结果集,这是我要更新 3 列的表,即 Is_Applicable_Price,prc_content_rid,prc_type_name

如果您清楚地注意到,您会在此处找到相同的 header_equipment_id 列。如果您将其与上面找到的结果进行分组,您将找到 3 个不同的组。但是在这 3 组中,一组是红色的,它是红色的,因为它们属于不同的 cell_group/relationship_name

**

  • 黄色和绿色为通过场景,红色、蓝色为失败。

**

如果 header_equipment_id(s) 组属于同一 cell_group

,我想更新列 Is_Applicable_Price,prc_content_rid,prc_type_name strong>relationship_name。

所以最终的结果集如下所示 -

如果可能,请帮助我输入任何内容。这是我知道一个查询不起作用的情况。但我需要有多个临时表进行转换。但这是我遇到的最短的。

我正在使用 Microsoft sql server 2012。

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

【问题讨论】:

  • 你有决定 Is_Applicable_Price,prc_content_rid,prc_type_name 的更新值的规则吗?

标签: sql-server


【解决方案1】:

似乎这两个表唯一的共同点是一个 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

【讨论】:

  • 嘿,两个表中的relationship_name和cell_group可以不同,所以不能基于它们加入...!
  • 每个单元组最多有 2 行吗?
  • 不,它不固定:(
  • 是的,您可以建议任何方法吗?只是方法
  • 我已经重写了解决方案,请看一下。
猜你喜欢
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2015-11-20
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多