2017-05-09 58 views
0

我不知道这是否可以使用自连接来实现。但我试图这样做。我有表如下图所示:SQL:如何自我加入?

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的独特组合,从该表中选择:数值和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) 

如果我无法提出我的问题,请让我知道。

谢谢。

+0

1 StoreId只有2级或更多? – TriV

+0

商店可能有更多的两个级别@TriV – Amir

+0

好吧,我认为你需要一个动态的数据透视表。尝试搜索它。 – TriV

回答

0

您可以用自做加盟,如果你喜欢:

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; 

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

+0

谢谢你的快速回复。你的解决方案给出了期望输出,但是levelid并不总是1或2.级别ID也可以具有其他值。 – Amir

+0

如果它是一个多级表,你是否期望每个级别有2个新的输出列?有最高级别的数量吗?这些是需要回答的事实。修改你的问题 - 不要依靠评论来完成问题。 –

+0

谢谢您的关注。我将从前端完成动态查询。 – Amir