1

次の選択があります。

SELECT TOP 1000 [ObjectiveId]
      ,[Name]
      ,[Text]
  FROM [dbo].[Objective]

それは私に与えます

Name    Text
0100    Header1
0101    Detail1
0102    Detail2
0200    Header2
0201    Detail1a
0202    Detail1b

||| を使用してこのような文字列を作成する方法はありますか データからの除算器。

Header1  |||  Detail1
Header1  |||  Detail2
Header2  |||  Detail1a
Header2  |||  Detail1b etc. 

ここで重要なのは、名前の下 2 桁が「00」の場合、それは次の詳細行のヘッダー行であるということです。

4

4 に答える 4

1
; WITH headers AS (
  SELECT Name
       , Text
  FROM   dbo.Objective
  WHERE  Right(Name, 2) = '00'
)
, details AS (
  SELECT Name
       , Text
  FROM   dbo.Objective
  WHERE  Right(Name, 2) <> '00'
)
SELECT headers.Text + ' ||| ' + details.Text
FROM   headers
 LEFT
  JOIN details
    ON Left(details.name, 2) = Left(headers.name, 2)
于 2013-08-05T10:50:44.767 に答える
-1
select top 1000 A.[Text]+' ||| '+B.[Text]
FROM [dbo].[DILL] as A
Inner join [dbo].[DILL] as B
on substring(A.[Name],3,5) = '00'
and A.[Text] != B.[Text] 
and substring(B.[Name],1,3) = substring(A.[Name],1,3)

編集:コードの最後の行を追加して正しいものを使用するのを忘れましたJOIN

于 2013-08-05T10:51:07.923 に答える