当所有记录映射到另一个表时选择一条记录
我有两个表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)
这些都是我的表:
例如为:
Select * From #Temp A
Inner Join #Temp2 B On A.Id=B.Table1Id
Where A.Value=1
看到我选择了图像的tecords。第一个表单记录被映射到第二个表上的所有三个记录。所以,我需要输出这样的
100300700 - >此值映射到
对不起1表的所有记录,如果你不明白我的问题,请咨询我。
使用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
您在查询结尾处忘了';'; –
它给出了问卷所要求的确切输出。 – mohan111
我不确定这个问题是关于什么的(可能是关系分割查询,但不清楚)。我只赞扬代码中缺少查询终结符 - 并且在开始时将它放错位置,而不是查询结束。 –
你可以不喜欢这样,但如果有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
是mysql还是sql server? –