2015-09-04 157 views
1

我有两个表Temp (IdentityId, Value)Temp2 (IdentityId, ReferrenceId, Value)当所有记录映射到另一个表时选择一条记录

我需要映射这两个表,并从第二个表中获取一个记录,它将第一个表中的所有记录映射到第二个表。

Create Table #Temp 
(Id int, Value int) 

Insert into #Temp Values(1,1),(2,1),(3,1),(4,2),(5,2),(6,3) 


Create Table #Temp2 
(
    Id2 int, 
    Table1Id int, 
    OutPutValue int 
) 

Insert into #Temp2 Values(1,1,100),(2,2,100),(3,3,100), 
        (7,1,200),(8,2,200), 
        (4,1,300),(5,2,300),(6,3,300), 
        (9,1,400), 
        (10,2,500), 
        (11,4,600),(12,5,600), 
        (13,1,700),(14,2,700),(15,3,700) 

这些都是我的表:

enter image description here                         enter image description here

例如为:

Select * From #Temp A 
Inner Join #Temp2 B On A.Id=B.Table1Id 
Where A.Value=1 

enter image description here

看到我选择了图像的tecords。第一个表单记录被映射到第二个表上的所有三个记录。所以,我需要输出这样的

enter image description here

100300700 - >此值映射到

对不起1表的所有记录,如果你不明白我的问题,请咨询我。

+2

是mysql还是sql server? –

回答

0

使用ROW_NUMBER partioning我们可以得到

;WITH CTE as (Select *, 
ROW_NUMBER()over(partition by OUTPUTVALUE order by id)rn 
From #Temp A 
    Inner Join #Temp2 B On A.Id=B.Table1Id 
    Where A.Value=1) 

    SELECT OUTPUTVALUE FROM cte where rn >= 3 
+1

您在查询结尾处忘了';'; –

+0

它给出了问卷所要求的确切输出。 – mohan111

+0

我不确定这个问题是关于什么的(可能是关系分割查询,但不清楚)。我只赞扬代码中缺少查询终结符 - 并且在开始时将它放错位置,而不是查询结束。 –

-1

你可以不喜欢这样,但如果有NULL值,并根据您的表的大小可能不是最好的,这可能不会给你想要的结果。

WITH AllAssigned AS 
(
    SELECT 
     OutputValue 
     , (SELECT COUNT(DISTINCT value) FROM #temp) AS TotalDistinctValues 
     , COUNT(DISTINCT Table1Id) AS TotalAssignedValues 

    FROM 
     #temp2 

    GROUP BY 
     OutputValue 
) 

SELECT 
    * 

FROM  
    AllAssigned 

WHERE 
    AllAssigned.TotalDistinctValues = AllAssigned.TotalAssignedValues 
相关问题