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])

問題は、結果の一部を 1 つにマージする必要があることです。

以下は私がやりたいことですが、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 に対して 2 つの大量のデータを返します。

ありがとう

4

2 に答える 2

1

and句に伝播するcase必要がありますgroup byorder 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 に答える