比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中
Posted
技术标签:
【中文标题】比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中【英文标题】:Compare rows which belongs to different ids group under another id and print a result in a separate column 【发布时间】:2020-07-16 09:23:23 【问题描述】:我正在寻找一种 SQL 查询解决方案,该解决方案可以让我比较不同的属性及其值,它们在行中,用于分组在父 ID 下的不同 ID。我想在单独的列中打印结果是否匹配。下面的屏幕截图包含数据和以红色标记的所需结果。
在此处添加我从 GMB 运行查询时得到的结果。我还添加了 Excpected_Result 列,以便我们可以轻松查看差异: GMB query vs expected result
【问题讨论】:
我目前正在尝试使用 CASE WHEN 语句解决问题,但目前似乎无法按预期工作 随时提供您的尝试,以便我们指出可能的改进或解释您的查询为何不起作用 【参考方案1】:您可以使用窗口函数和条件表达式:
select
t.*,
case when count(*) over(partition by attributeName, attributeValue) > 1
then 'True'
else 'False'
end has_match
from mytable t
【讨论】:
嗨。仍然没有按预期工作。我在上面添加了一个屏幕截图,以便我们可以看到 Expected_Result 和 has_match 列之间的差异。【参考方案2】:如果你的表不是太大,你可以像这样在 GroupNumber 和 AttributeName 上加入它自己:
SELECT
t1.AttributeName, t1.AttributeValue, t2.AttributeValue, CASE WHEN t1.AttributeValue = t2.AttributeValue THEN 'TRUE' ELSE 'FALSE' END as Result
FROM Table AS t1
INNER JOIN Table AS t2 ON t1.GroupNumber = t2.GroupNumber AND t1.AttributeName = t2.AttributeName
【讨论】:
感谢您,Artur,您的快速反应。它不像我期望的那样工作,但也许我不太清楚我试图实现的目标 - 我需要将一组 id 中的 AttributeValue 与驻留在同一任务/父 id 中的另一个 id 进行比较,你可以说.例如。来自 ID:888 的 NAME 应该与来自 ID:777 的 NAME 进行比较,如果匹配则打印两者 TRUE以上是关于比较另一个 id 下属于不同 ids 组的行并将结果打印在单独的列中的主要内容,如果未能解决你的问题,请参考以下文章