【问题标题】:Compare two values from one column based on values in another根据另一列中的值比较一列中的两个值
【发布时间】:2020-11-24 06:09:05
【问题描述】:

我有一个表格,我需要根据它们在另一列中的名称比较两个值,以查看哪个更大。基本上:

If **name1** -> value1
If **name2** -> value2
Compare **value1 > value2**

我已经进行了总结,但我找不到使用CASE WHEN 方法来解决这种情况的方法。

【问题讨论】:

    标签: sql sql-server tsql pivot


    【解决方案1】:

    您可以PIVOT 数据并拥有当前行中的所有值。然后,随意比较它们:

    SELECT [Id]
          ,[name1], [name2], [name3], [name4]
    FROM [my_table]
    PIVOT
    (
        MAX([value]) FOR [column] IN ([name1], [name2], [name3], [name4])
    ) PVT
    

    SELECT [Id]
          ,MAX(CASE WHEN [column] = 'name1' THEN [value] END) AS [name1]
          ,MAX(CASE WHEN [column] = 'name2' THEN [value] END) AS [name2]
          ,MAX(CASE WHEN [column] = 'name3' THEN [value] END) AS [name3]
          ,MAX(CASE WHEN [column] = 'name4' THEN [value] END) AS [name4]
    FROM [my_table]
    GROUP [Id];
    

    【讨论】:

    • 好吧,你从来没有提到数据量?我可以给你另一种技术,但你需要分享更多细节。
    • 列名来自另一个 ID 表并且正在增长。目前它有大约 20 个不同的名称,它们是不同指标的名称。我找到了一些解决方法,并在您的解决方案中添加了一个 WHERE 子句来过滤我想要的名称。
    • @Yana 你也可以试试第二种方法。最好的方法是在新表中以PIVOT 的方式预先计算值,因为不需要实时执行此操作。
    猜你喜欢
    • 2015-08-23
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2019-11-22
    • 2021-09-07
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多