【问题标题】:Choose random column value between rows with same ID在具有相同 ID 的行之间选择随机列值
【发布时间】:2016-07-23 09:19:04
【问题描述】:

我是 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 函数

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

【问题讨论】:

  • 请解释为什么你有这四个限制。
  • 这些是 Informatica Cloud 中配置已保存查询的限制。

标签: informatica informatica-cloud


【解决方案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 的结果。

【讨论】:

  • 谢谢!这在数据库中效果很好,但在 Informatica Cloud 中我仍然收到错误:不支持的数据库查询。查询中只允许选择语句。
  • 这只是一个选择语句.....它很可能是使用的函数 ROW_NUMBER() 和 NEWID() 的问题,但如果是这种情况,那么这不是正在传递给 SQL 服务器,并且应该从您的帖子中删除 sql-server 标记
猜你喜欢
  • 1970-01-01
  • 2021-05-02
  • 2020-12-20
  • 1970-01-01
  • 2016-09-29
  • 2021-02-06
  • 2021-07-29
  • 1970-01-01
  • 2017-05-17
相关资源
最近更新 更多