SQL Group By和更改分组值

时间:2018-10-31 07:10:21

标签: sql sql-server tsql

我有一张这样的桌子:

1 | Madrid | 45000
2 | Berlin | 35000
3 | Berlin | 65000

现在我要显示这样的结果:

1 | Madrid | 45000
2 | Berlin | "Different Values"

因此,基本上,我想使用“分组依据”,如果将其分组,则将某些列的值更改为手动字符串。 我考虑过使用一个视图,将该视图中的所有值更新为我有分组列重复项的字符串,然后使用实际查询。 我什至考虑过要在执行此操作的sql服务器中实现程序集,但是我没有找到任何关于此的好的教程,只是您可以做到这一点。 还是有一个更好的主意? (这里使用的实际表非常庞大,sql查询确实有时需要花费3分钟才能执行,因此我简化了此示例,并且我不想在此处处理要分组的每一列的计数,因为这可能需要更多时间而不是几分钟。

2 个答案:

答案 0 :(得分:2)

类似的事情应该起作用

select min(id) as id, 
       name,
       case when count(*) = 1 
            then cast(sum(value) as varchar)
            else 'Different values'
       end as value
from your_table
group by name

答案 1 :(得分:1)

我会这样:

select min(id) as id, city,
       (case when min(value) = max(value)
             then cast(max(value) as varchar(255))
             else 'Different Values'
        end) as result
from t
group by city;

实际上,我可能会使用比“不同值”更有意义的东西,例如范围:

select min(id) as id, city,
       (case when min(value) = max(value)
             then cast(max(value) as varchar(255))
             else cast(min(value) as varchar(255)) + '-' + cast(max(value) as varchar(255))
        end) as result
from t
group by city;