2017-03-01 101 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