将多个选择结果合并为一个

时间:2013-08-14 22:48:07

标签: sql sql-server tsql

我不小心删除了数据库表,不得不从过时的备份中恢复它。我在备份和恢复之间做了一些事情,这改变了我从某个查询中收到的结果。我想要五个结果,它给了我七个,因为结果行有不同的Color值。不知怎的,在我完美地工作之前。这是我的SQL:

select LocationID, SUM(TransAmount) as TotalSales, DBAName, Color 
from dbx.dbo.SampleData 
group by LocationID, DBAName, Color

曾经给我:

LocationID      TotalSales  DBAName                Color
267529000000    7660.51     FASTWAY #1 TACO BELL   Red
267529000001    2681.801    FASTWAY #2 TACO BELL   Orange
267529000002    3020.57     FASTWAY #3 TACO BELL   Yellow
267529000003    3062.63     FASTWAY #4 TACO BELL   Green
267529000004    3401.36     FASTWAY #5 TACO BELL   Blue

但是现在看似相同的数据它给了我:

LocationID      TotalSales  DBAName                 Color
267529000000    2183.26     FASTWAY #1 TACO BELL    Indigo
267529000000    2901.48     FASTWAY #1 TACO BELL    Red
267529000000    2575.77     FASTWAY #1 TACO BELL    Violet
267529000001    2681.80     FASTWAY #2 TACO BELL    Orange
267529000002    3020.57     FASTWAY #3 TACO BELL    Yellow
267529000003    3062.63     FASTWAY #4 TACO BELL    Blue
267529000004    3401.36     FASTWAY #5 TACO BELL    Green

总是将Indigo和Violet作为颜色,但忽略了它们并使用Red作为主要颜色。有任何想法吗?试图绕过这种令人沮丧的事件?谢谢!

1 个答案:

答案 0 :(得分:0)

并不是很清楚你想要什么,但是如果要让IndigoViolet计算并显示为Red,你可以使用简单{{1}的内部查询更改颜色然后将其包装在外部查询中进行聚合和分组的语句。它将获得所需的结果:

CASE

然而,这可能不是一个好的解决方案。

编辑:找到第一个值的另一种方法。虽然可能不利于表现:

SELECT LocationID, SUM(TransAmount) AS TotalSales, DBAName, Color 
FROM (
  SELECT LocationID, TransAmount, DBAName, 
    CASE Color 
     WHEN 'Indigo' THEN 'Red' 
     WHEN 'Violet' THEN 'Red' 
     ELSE Color END 
    AS Color 
  FROM dbx.dbo.SampleData 
) x
GROUP BY LocationID, DBAName, Color