1

MAXレコードを除く選択されたすべてのレコードを表示するクエリがあります(クエリごとに最大5つのレコードが存在する可能性があります)。ただし、別の行に表示されます。結果を1行で表示するにはどうすればよいですか?

現在のデータ:

John Smith 
Jack Smith
Gerald Smith

1つの行(または複数の行ではなく別々のフィールド)に必要なデータ:

ジョンスミス; ジャック・スミス; ジェラルド・スミス

SQLステートメント:

 SELECT distinct /*all existing records */
 rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName)) as record1,
 '' as record2,
 ''  as record3,
 '' as record4,
 '' as record5
 FROM tenant t (nolock)
 INNER JOIN person pn (nolock) on pn.hmy = t.person
 WHERE pn.hmy <>
 (SELECT MAX(pn.hmy) 
 FROM tenant t (nolock)
 INNER JOIN person pn (nolock) on pn.hmy = t.person
 WHERE t.scode = '111111'
 )and t.scode = '111111'

助けてくれてありがとう!

4

2 に答える 2

2

SQL Server を使用しているようです。バージョン 2005 以降を使用している場合は、次の方法でこれを行うことができますrow_number()

SELECT (case when seqnum = 2 then rtrim(ltrim(max(pn.sFirstName+ ' ' + pn.uLastName)))  as record1,
       (case when seqnum = 3 then rtrim(ltrim(max(pn.sFirstName+ ' ' + pn.uLastName)))  as record2,
       (case when seqnum = 4 then rtrim(ltrim(max(pn.sFirstName+ ' ' + pn.uLastName)))  as record3,
       (case when seqnum = 5 then rtrim(ltrim(max(pn.sFirstName+ ' ' + pn.uLastName)))  as record4,
       (case when seqnum = 6 then rtrim(ltrim(max(pn.sFirstName+ ' ' + pn.uLastName)))  as record5
 FROM (select pn.*,
              ROW_NUMBER() over (partition by t.scode order by pn.hmy desc) as seqnum
       from tenant t (nolock) INNER JOIN
            person pn (nolock)
            on pn.hmy = t.person
       where t.scode = '111111'
      ) pn

The inner query assigns a sequential number based on pn.hmy, with the maximum value being 1. 外側のクエリは、条件を使用して 2 番目から 6 番目の値を選択し、データを要約します。

于 2013-03-22T13:59:53.267 に答える
0

その情報を保持する変数が必要です。

declare @result;
set @result = '';

select @result = @result + ',' + rtrim(ltrim(pn.sFirstName + ' ' + pn.uLastName))  
from ..... 

select substring(@result, 0, len(@result));
于 2013-03-22T13:47:21.770 に答える