2

以下のように2つの異なるテーブルがあり、SQLクエリの特定の要件があります。

Table1:
Name   RuleNumber
Tom    1,2
Pete   1,3

Table2:
RuleNumber  Description
1           Rule1
2           Rule2
3           Rule3

以下のようなSQLクエリ結果を取得するにはどうすればよいですか?

Name    Description
Tom     Rule1, Rule2
Pete    Rule1, Rule3
4

2 に答える 2

3

最初に、区切りリストを区切るカスタム分割関数が必要になります。次に、を使用FOR XML PATHして説明を結合します。これが最後のクエリです

select  t1.Name,
        STUFF(( SELECT ',' + Description
                FROM    table2 AS t2 
                WHERE   t2.ruleNumber in (select s from dbo.fn_split(t1.RuleNumber, ','))
        ORDER BY ruleNumber
        FOR XML PATH('')), 1, 1, '') as 'Description'
from    table1 t1

分割関数のコードは次のとおりです。

create function [dbo].[fn_Split]
(
    @String     varchar(8000) ,
    @Delimiter  varchar(10)
)
returns @tbl table (s varchar(1000))
as

begin
declare @i int ,
    @j int
    select  @i = 1
    while @i <= len(@String)
    begin
        select  @j = charindex(@Delimiter, @String, @i)
        if @j = 0
        begin
            select  @j = len(@String) + 1
        end
        insert  @tbl select substring(@String, @i, @j - @i)
        select  @i = @j + len(@Delimiter)
    end
    return
end
于 2013-03-27T00:10:58.417 に答える
0

Table1のRuleNumberにはどのように複数の値がありますか?文字列ですか?私はそれが:であると仮定します

Name / RuleNumber
Tom  / 1
Tom  / 2

次に、クエリは次のようになります。

select
  Name,
  ( 
     select Description 
     from Table2 as t2 
     where t1.ruleNumber = t2.ruleNumber
  ) as Description
from 
  table1 as t1
于 2013-03-27T00:09:41.870 に答える