当所有记录映射到另一个表时,选择一条记录

时间:2015-09-04 13:34:18

标签: sql sql-server sql-server-2008

我有两张表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

E.g:

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

100,300,700 - >此值将映射到第一个表的所有记录

对不起,如果你不明白我的问题,请问我。

2 个答案:

答案 0 :(得分:0)

使用Row_number分区我们可以得到

    ;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 :(得分:-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