关于我我不是SQL DBA程序员。我假装是一个人。因此,在设计复杂查询时,我是初学者/中间人,具体取决于它是什么。
到目前为止,这是我提出的一个例子,向您展示我喜欢做什么。
尝试研究这个并且我已经做到了这一点。
我想要的是RowNumber是动态的,基于两个因素RecId,GroupedDataId。
没有对我正在做的事情进行调整。我希望这个简单的例子能说明一点。
因素角色数未知。 RecId可以有多个GroupedDataIds。 GroupedDataIds只能有一条记录。
输出所需
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>
这就是我所得到的。请注意,角色#不会重新开始新的RecId,GroupedDataId分组。我希望订单会这样做,但它没有
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
任何帮助都将非常感谢...我花了一整天的时间让自己达到这一点,我的数据看起来像上面的例子
谢谢:)
答案 0 :(得分:1)
您当前的查询非常接近,您错过了partition by
窗口函数上的row_number()
。这将允许每次recId
更改时将数字重置为1:
SELECT RecId
, GroupedDataId
, AnswerText
, Question = 'ROLE' + CAST(ROW_NUMBER() OVER (partition by RecId
order by RecId, GroupedDataId) AS VARCHAR(max))
FROM example;
答案 1 :(得分: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