【问题标题】:Compare two values of different rows in 1 table比较 1 个表中不同行的两个值
【发布时间】:2021-03-09 01:53:56
【问题描述】:

我有以下表A

Skey    Rank
1001    1
1001    4
1001    0
1001    5
1001    rgvdv

Skey 不是主键,但根据要求 Result 应该基于 skey

我想以给出以下结果的方式编写查询 当Rank =1时,将rank标记为average,如果是1和4,5标记为Best,最后1和4为good

所以上面的表格数据应该是这样的

Skey   Rank
1001   Best

如何在 SQL 中执行此操作?

提前致谢

【问题讨论】:

  • 你试过什么?你在哪里卡住了?请向我们展示您的尝试。
  • 其他组合呢? 1 和 5 还是 4 和 5?

标签: sql sql-server database join


【解决方案1】:

我不确定我是否正确,但认为您可以为此使用“Case ... When ... Then”模式。它还根据您的等级提供短桌。我正在为您编写一个示例查询:

Select column_1,column_2,Rank,
(CASE
WHEN rank ='1' THEN
  'Avarage'
WHEN rank ='4' THEN
  'Good'
WHEN rank='5' THEN
  'Best'
ELSE
  Rank
END)
AS Rank_Line From Table_name desc rank_line

【讨论】:

  • 感谢您的回答,但这仅涵盖 1 个单一值。必须通过合并行来检查相同的 skey,这意味着,如果相同的 Skey =1 和 4 和 5 将其标记为 BEST
【解决方案2】:
SELECT Skey,
  CASE
    WHEN COUNT(CASE WHEN Rank='1' THEN 1 ELSE null END)>0
     AND COUNT(CASE WHEN Rank='5' THEN 1 ELSE null END)>0
    THEN 'Best'
    WHEN COUNT(CASE WHEN Rank='1' THEN 1 ELSE null END)>0
     AND COUNT(CASE WHEN Rank='4' THEN 1 ELSE null END)>0
    THEN 'Good'
    WHEN COUNT(CASE WHEN Rank='1' THEN 1 ELSE null END)>0
    THEN 'Average'
    ELSE 'Unknown'
  END AS Rank
FROM A
GROUP BY Skey;

【讨论】:

    【解决方案3】:

    您似乎想根据最大 numeric 排名进行分配。这表明:

    select skey,
           (case max(convert(int, ranking))
                when 1 then 'Average'
                when 4 then 'Good'
                when 5 then 'Best'
            end) as rank
    from t
    group by skey
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 2014-05-09
      相关资源
      最近更新 更多