在具有相同ID的行之间选择随机列值

时间:2016-07-22 19:09:11

标签: informatica informatica-cloud

我是SQL的初学者,我必须在Informatica Cloud中执行已保存的查询,以便与SQL Server数据库建立连接。

我有一个表格,其中具有相同formId的行具有相同的列,但“possibleSalesman”除外,它是一个文本列:

formId, email, possibleSalesman
1, email1, user1
1, email1, user2
1, email1, user4
2, email2, user2
3, email3, user3
3, email3, user1

我需要的是为每个id获取一行并随机选择“possibleSalesman”。

例如:

1, email1, user4
2, email2, user2
3, email3, user3

我发现了类似的问题,但解决方案对我没有帮助,因为Informatica有一些限制:

  • 仅SELECT语句
  • 无法使用星号选择所有列
  • 无法使用转换功能
  • 无法使用COUNT功能

如果有人能帮助我,我将非常感激!

1 个答案:

答案 0 :(得分:1)

SELECT
    FormId
    ,Email
    ,possibleSalesMan
FROM
    (
    SELECT
      FormId
      ,Email
      ,possibleSalesMan
      ,ROW_NUMBER() OVER (PARTITION BY FormId ORDER BY NEWID()) AS RowNumber
    FROM
       TableName) t
WHERE
    t.RowNumber = 1

在SQL Server 2008+中,您可以使用ROW_NUMBER()窗口函数和NEWID()来实现随机顺序,然后选择ROW_NUMBER() = 1的结果。