gpt4 book ai didi

SQL:查找字段值不同的行

转载 作者:行者123 更新时间:2023-12-04 07:07:10 25 4
gpt4 key购买 nike

我有一个这样结构的数据库表(为简洁起见省略了不相关的字段):

rankings
------------------
(PK) indicator_id
(PK) alternative_id
(PK) analysis_id
rank

所有字段都是整数;前三个(标记为“(PK)”)是复合主键。给定的“分析”有多个“备选方案”,每个“备选方案”对于许多“指标”中的每一个都有一个“等级”。

我正在寻找一种有效的方法来比较任意数量的分析,这些分析的任何替代/指标组合的排名都不同。因此,例如,如果我们有以下数据:
analysis_id | alternative_id | indicator_id | rank
----------------------------------------------------
1 | 1 | 1 | 4
1 | 1 | 2 | 6
1 | 2 | 1 | 3
1 | 2 | 2 | 9
2 | 1 | 1 | 4
2 | 1 | 2 | 7
2 | 2 | 1 | 4
2 | 2 | 2 | 9

...那么理想的方法将确定以下差异:
analysis_id | alternative_id | indicator_id | rank
----------------------------------------------------
1 | 1 | 2 | 6
2 | 1 | 2 | 7
1 | 2 | 1 | 3
2 | 2 | 1 | 4

我想出了一个查询,可以对 2 个分析 ID 执行我想要的操作,但是我无法将其概括为查找任意数量的分析 ID 之间的差异(即用户可能想要比较 2、5 或 9,或其他什么,并找到至少一个分析与其他任何分析不同的任何行)。我的查询是:
declare @analysisId1 int, @analysisId2 int;
select @analysisId1 = 1, @analysisId2 = 2;

select
r1.indicator_id,
r1.alternative_id,
r1.[rank] as Analysis1Rank,
r2.[rank] as Analysis2Rank
from rankings r1
inner join rankings r2
on r1.indicator_id = r2.indicator_id
and r1.alternative_id = r2.alternative_id
and r2.analysis_id = @analysisId2
where
r1.analysis_id = @analysisId1
and r1.[rank] != r2.[rank]

(它将分析值放入其他字段而不是行中。我认为任何一种方法都可以。)

如何概括此查询以处理许多分析 ID? (或者,想出一个不同的、更好的查询来完成这项工作?)我正在使用 SQL Server 2005,以防万一。

如有必要,我总是可以从表中提取所有数据并查找代码中的差异,但 SQL 解决方案会更可取,因为我通常只关心数千行中的几行,并且将它们全部传输是没有意义的如果我能避免的话。 (但是,如果您有一个令人信服的理由不在 SQL 中执行此操作,请这么说 - 我也认为这是一个很好的答案!)

最佳答案

这将返回您想要的数据集 - 现在您只需要一种方法来将所需的分析 ID 传递给查询。或者可能只是在您的应用程序中过滤这些数据。

    select r.* from rankings r
inner join
(
select alternative_id, indicator_id
from rankings
group by alternative_id, indicator_id
having count(distinct rank) > 1
) differ on r.alternative_id = differ.alternative_id
and r.indicator_id = differ.indicator_id
order by r.alternative_id, r.indicator_id, r.analysis_id, r.rank

关于SQL:查找字段值不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com