我有两张表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)
这些是我的表格:
E.g:
Select * From #Temp A
Inner Join #Temp2 B On A.Id=B.Table1Id
Where A.Value=1
查看我选择的图像中的tecords。第一个表单个记录映射到第二个表上的所有三个记录。所以我需要这样的输出
100,300,700 - >此值将映射到第一个表的所有记录
对不起,如果你不明白我的问题,请问我。
答案 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