2

私について 私は SQL DBA プログラマーではありません。私は一人のふりをしています。したがって、複雑なクエリの設計に関しては、それが何であるかに応じて、私は初心者/中道です。

これまでのところ、これは私がやりたいことを示す例として思いついたものです。

これを調査してみましたが、ここまで来ました。

私が望むのは、RowNumber が RecId、GroupedDataId の 2 つの要因に基づいて動的になることです。

私がしていることに夢中になることなく。この簡単な例で十分に説明できることを願っています。

要因 役割の数は不明です。RecId は、複数の GroupedDataId を持つことができます。GroupedDataIds は、1 つのレコードのみを持つことができます。

出力希望

PCRID,GROuPedDataId, AnswerText, Question
1   1   Driver, Driver  ROLE1
1   2   Driver, Driver  ROLE2
1   33  Driver, Driver  ROLE3
2   48  Driver, Driver  ROLE1
2   55  Driver, Driver  ROLE2
3   32  Driver, Driver  ROLE1
3   33  Driver, Driver  ROLE2
4   109 Driver, Driver  ROLE1

作例

Create Table #example
(
 RecId int,
 GroupedDataId int,
 Question varChar(50),
 AnswerText varchar(100)
)
INSERT INTO #example (RecId, GroupedDataId, Question, AnswerText)
SELECT 1, 1, 'ROLE', 'Driver, Driver'
UNION
SELECT 1, 2, 'ROLE', 'Driver, Driver'
UNION
SELECT 1, 33, 'ROLE', 'Driver, Driver'
UNION
SELECT 2, 55, 'ROLE', 'Driver, Driver'
UNION
SELECT 2, 48, 'ROLE', 'Driver, Driver'
UNION
SELECT 3, 32, 'ROLE', 'Driver, Driver'
UNION<BR>
SELECT 3, 33, 'ROLE', 'Driver, Driver'
UNION
SELECT 4, 109, 'ROLE', 'Driver, Driver'

SELECT RecId
, GroupedDataId
, AnswerText
, Question = 'ROLE' + CAST(ROW_NUMBER() OVER (ORDER BY (SELECT RecId), (SELECT GroupedDataId)) AS VARCHAR(max))
FROM #example

DROP TABLE #example
<P>

これは私が得ているものです。Role # は、新しい RecId,GroupedDataId グループ化で最初からやり直さないことに注意してください。order by がそれを行うことを望んでいましたが、そうではありませんでした

PCRID,GROuPedDataId, AnswerText, Question
1       1   Driver, Driver  ROLE1
1   2   Driver, Driver  ROLE2
1   33  Driver, Driver  ROLE3
2   48  Driver, Driver  ROLE4
2   55  Driver, Driver  ROLE5
3   32  Driver, Driver  ROLE6
3   33  Driver, Driver  ROLE7
4   109 Driver, Driver  ROLE8

どんな助けでも大歓迎です...私は、私のデータが上記の例のように見えるこの時点に至るまで、ほぼ一日を費やしました。

ありがとう :)

4

2 に答える 2

1

ROW_NUMBER() 関数の PARTITION メソッドを使用してみてください。

SELECT RecId
, GroupedDataId
, AnswerText
, Question = 'ROLE' + CAST(ROW_NUMBER() OVER (PARTITION BY RecID ORDER BY RecId, GroupedDataId) AS VARCHAR(max))
FROM #example
于 2013-09-03T18:34:05.267 に答える