【问题标题】:SQL: How do I tag rows based on like values?SQL:如何根据相似值标记行?
【发布时间】:2015-03-08 21:34:03
【问题描述】:

我有一个如下所示的 SQl 表:

我试图弄清楚如何根据组所在的域来标记一组具有 Primary 属性的组,并且它们都具有相同的 SetID。

例如,我想将位于域 A 中的组标记为组的主要组。因此,在上表中,第 2 行将被标记为主要组,就像第 6 行将被标记为主要组一样。

我目前正在使用 SQl Server。请帮忙!

谢谢你:)

编辑

我想要的输出是这样的:

因此,在 SetID 1 中的组中,第 2 行位于域 A 中,因此其中一个成为主要组。本质上,我所做的是确定要合并的组集。因此,Primary 标签允许我确定哪个组将是父组,以及一组中的哪些其他组将是它的子组。

【问题讨论】:

  • 请编辑您的问题并显示您想要的输出。我了解逻辑,但不了解标签的实际外观。请记住,行号不会存储在表中,除非您有一个明确的列来存储它。

标签: sql sql-server datatable logic business-intelligence


【解决方案1】:

我猜你想要 all 集合中的行上的标签。标签的唯一逻辑是帐户名称列。所以,这样的事情应该可以工作:

with toupdate as (
      select t.*,
             min(case when domain = 'A' then AccountName end) over (partition by setid) as minan
      from table t
     )
update toupdate
    set primary = minan;

编辑:

对于已澄清的问题,您应该能够做到:

update table t
    set primary = 'primary'
    where domain = 'A';

但是,在我看来,在这种情况下,使用计算列会更好。

如果一个集合可能有多个具有域 A 的行,那么:

with toupdate as (
      select t.*, row_number() over (partition by domain order by newid()) as seqnum
      from table t
     )
update toupdate
    set primary = 'primary'
    where seqnum = 1;

【讨论】:

  • 我只想标记一组中的 1 行。如果我在 SetID 相等且 Domain = A 的情况下自行加入表以设置主要工作?
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多