【问题标题】:Get records based on row value根据行值获取记录
【发布时间】:2022-11-25 02:44:31
【问题描述】:

我想根据行值获取记录。请参阅所附图片以获取带记录的表格概览。

如果对于特定的ESAProjectID,列projecttype中没有Execution Project,则取值所在的行 projecttype='Group Project'

否则

如果为特定的 ESAProjectID 找到了 Execution ProjectGroup Project 然后 只拿projecttype='Execution Project'

在所附的图像中,我用绿色标记的记录是预期的结果。

我试过这个 SQL 但没有运气

SELECT DISTINCT a.ESAProjectID, a.projecttype
  FROM test1 a
 INNER JOIN test1 b
    ON a.ESAProjectID = b.ESAProjectID
 WHERE a.projecttype = 'Group Project'

【问题讨论】:

  • “执行项目”和“组项目”是projecttype 列中唯一可能的值吗?
  • @forpas 是的,这两个是字段值

标签: mysql sql


【解决方案1】:

如果 DB 的版本是 8.0+,那么您可以使用每个 ESAProjectID 值的窗口聚合函数进行计数,例如

WITH tt AS
(
 SELECT t.*, 
        SUM(projecttype='Execution Project') OVER (PARTITION BY ESAProjectID) AS sm
   FROM test1 AS t
)
SELECT ESAProjectID, ProjectID, projecttype
  FROM tt
 WHERE sm > 0 AND projecttype = 'Execution Project'
    OR sm = 0 AND projecttype = 'Group Project'

Demo

【讨论】:

  • 谢谢您的回答。该演示看起来运行良好。将在我这边检查并确认
  • 不客气@ManiMuthuPandi 好的
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多