SQL:如何自我加入?

时间:2017-05-09 02:05:08

标签: sql sql-server

我不知道这是否可以通过自我加入来实现。但我试过这样做。我有如下表:

storeid levelid modelid classid value1  value2
101     1       34       23      245    246
101     2       34       23      112    229
102     1       34       23      369    226
102     2       34       23      869    245
103     1       34       23      111    102
103     2       34       23      545    985

所以我想从这个表中选择,以便明确选择storeid,并且对于levelid,modelid,classid的唯一组合:value1和value2是水平分配的。我的意思是在下面的结构:

storeid value1  value2  value1  value2
101      245    246       112    119
102      369    226       869    245
103      111    102       545    985

我只有自我加入的想法,但我所做的并不是解决方案的附近。如果不是解决方案有用的想法也将非常感谢。以下是对测试的查询:

create table  #tblTest
(
  storeid int,
  levelid int,
  modelid int,
  classid int,
  value1 int,
  value2 int,
)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(101,1,34,23,245,246)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(101,2,34,23,225,229)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(102,1,34,23,245,226)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(102,2,34,23,245,245)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(103,1,34,23,245,102)
insert into #tblTest (storeid,levelid,modelid,classid,value1,value2) values(103,2,34,23,45,985)

如果我无法提出问题,请告诉我。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您愿意,可以使用自联接执行此操作:

select t1.storeid, t1.value1, t1.value2, t2.value1, t2.value2
from #tbltest t1 join
     #tbltest t2
     on t1.storedid = t2.storedid and
        t1.levelid = 1 and t2.levelid = 2;

在您的示例数据中,不需要modelidclassid。购买你也可以为他们添加平等条件。