0

我知道我想做什么,但我正在努力寻找最好的方法。

我有一个查询返回给我一些数据:

SELECT
[Description] As [Name], month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],        COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY  [Description],Year([OccuredOn]), month([OccuredOn])

问题是我需要将一些结果合并为一个。

以下是我想要做的,但我需要能够将 string1 和 string2 的记录合并到 string3 的单个记录中。

SELECT
CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE  [Description] 
END As [Name], 
month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],  COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY  [Description],Year([OccuredOn]), month([OccuredOn])

我知道上述方法不是这样做的,但希望有人能指出一种方法,我可以返回我的结果,其中任何带有 string1 或 string2 的描述作为该日期的单个唯一行返回,并具有累积计数。

上面的 SQL 显然返回了 string1 和 string2 的两批数据

谢谢

4

2 回答 2

1

你必须传播你casegroup byandorder by子句

SELECT
CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE  [Description] 
END As [Name], 
month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],  COUNT([id]) AS Cnt 
FROM MyTable 
GROUP BY CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE  [Description] 
END, Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY  CASE [Description] 
    WHEN 'String1' THEN 'String3' 
    WHEN 'String2' THEN 'String3' 
    ELSE  [Description] 
END,Year([OccuredOn]), month([OccuredOn])
于 2013-10-16T15:02:19.650 回答
0

你能做到吗?

SELECT *
FROM (SELECT
      CASE [Description] 
      WHEN 'String1' THEN 'String3' 
      ELSE  [Description] 
      END As [Name], 
      month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],  COUNT([id]) AS Cnt 
      FROM MyTable 
      UNION
      SELECT
      CASE [Description] 
      WHEN 'String2' THEN 'String3' 
      ELSE  [Description] 
      END As [Name], 
      month([OccuredOn]) as [Month], year([OccuredOn]) AS [Year],  COUNT([id]) AS Cnt 
      FROM MyTable) 
GROUP BY [Description], Year([OccuredOn]), Month([OccuredOn]) 
ORDER BY  [Description],Year([OccuredOn]), month([OccuredOn])
于 2013-10-16T15:09:44.140 回答