2017-03-01 100 views
1

表1 “IN” 的条款:SQL查询跨越两个表和列

Id | Mapping_Id (INT) 
--- --------------- 
    1 1001 
    2 1002 
    3 1003 
    4 1004 

表2

Name | ResultId (nvarchar(Max)) 
---- ------------------------- 
    AB 1001,1002,1003,1004 

现在,我需要查询这给Id的总和从表1,通过使用表1表2在列Mapping_IdResultId

即:像选择总和(A.Id),B.Name从表1 A,表2 B,其中A.Mapping_Id在(B.ResultId)

预期的结果:

Count | ResultId (nvarchar(Max)) 
----- ------------------------- 
    10  AB 
+0

为什么你需要一个id字段的总和,如果我可以问吗? –

+1

不要将列值存储为逗号分隔的 – Wanderer

+0

或者代替ID,我可能会有一些价格对应于那些ID的...... @ Nico Van Belle – Ray

回答

2

尝试此查询:

SELECT SUM(Table1.id), Table2.Name 
from Table1 
join Table2 on CHARINDEX(cast(Table1.Mapping_id as varchar), Table2.ResultID)>0 
group by Table2.Name 
+0

这将工作其他样本数据? – KumarHarsh

+0

例如:如果mapping_id ='1',并且resultId ='1001'=>查询结果将是错误的 –

1

尝试......

Select sum(A.Id),B.Name from Table1 A,Table2 B where A.Mapping_Id in (select value from SplitDelimited(B.ResultId,',')) 

使用SplitDelimited机能的研究对于..

ALTER FUNCTION [dbo].[SplitDelimited] 
( 
    @List nvarchar(MAX), 
    @SplitOn nvarchar(1) 
) 
RETURNS @RtnValue table (
    Id int identity(1,1), 
    Value nvarchar(MAX) 
) 

AS 
BEGIN 
    While (Charindex(@SplitOn,@List)>0) 
    Begin 
     if(len(@List) > 0) 
     begin 
      Insert Into @RtnValue (value) 
      Select 
       Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 
      Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 
     end 
    End 

    Insert Into @RtnValue (Value) 
    Select Value = ltrim(rtrim(@List)) 

    Return 
END 
+0

这对所有人都适用,并且是可重复的。 – KumarHarsh

+0

@KumarHarsh如果它的可靠然后请upvote我回答.. – Darshak