条件下跨分区的 SQL 标志

问题描述 投票:0回答:1

我正在尝试创建一个标志,每当每个帐户的 BD 行计数达到 4 时,该标志就会填充“Y”。我附上了一个输出示例。

我基本上需要在一组中找到一个值时标记所有行。

sql ssms
1个回答
0
投票

假设您实际上不需要保留标志(我从评论中得到的印象),我认为您可能正在寻找类似的东西:

SELECT test.*, CASE WHEN MAX(bd_line_count) OVER (PARTITION BY account) >= 4 THEN 'Y' ELSE 'N' END flag
FROM test

这使用

MAX
的分析版本在
bd_line_count
分组中找到最大的
account
,并基于此设置列
flag
。然后你可以包装它以获得所有'Y'行:

SELECT *
FROM
(
  SELECT test.*, CASE WHEN MAX(bd_line_count) OVER (PARTITION BY account) >= 4 THEN 'Y' ELSE 'N' END flag
  FROM test
) t
WHERE flag = 'Y'

但是,如果您要这样做,则实际上不需要有 Y/N 标志。你可以直接使用最大值:

SELECT *
FROM
(
  SELECT test.*, MAX(bd_line_count) OVER (PARTITION BY account) mx
  FROM test
) t
WHERE mx >= 4

你可以在这个小提琴中看到这个(以及其他一些变体)

有点不清楚您是在生成行数还是实际存储了行数并且可能与计算行数不同。根据答案,你可能更喜欢这样的东西:

SELECT *
FROM test
WHERE account IN
(
 SELECT account
 FROM test
 GROUP BY account
 HAVING COUNT(*) >=4
)

内部查询

count
s 每
account
的行数并找到具有 4 或更多的
account
s。外部查询获取与这些帐户匹配的所有行。

© www.soinside.com 2019 - 2024. All rights reserved.