最初に、インライン テーブル値分割関数を作成します (この関数は、必要に応じてここから安全または高速なものを選択できます。文字列には、XML エンティティ化の問題となる文字 ( 、 など) が含まれないことを前提としています>
) <
。
CREATE FUNCTION dbo.SplitSafeStrings
(
@List NVARCHAR(MAX),
@Delimiter NVARCHAR(255)
)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
( SELECT Item = LTRIM(RTRIM(y.i.value('(./text())[1]', 'nvarchar(4000)')))
FROM ( SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>') + '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i));
GO
これで、クエリは次のいずれかになります (日付と時刻でグループ化するか、日付だけでグループ化するかによって異なります)。
SELECT s.Item, SUM(CountColumn)
FROM dbo.myTable AS t
CROSS APPLY dbo.SplitSafeStrings(t.DateColumn, ',') AS s
GROUP BY s.Item;
SELECT LEFT(s.Item, 10), SUM(CountColumn)
FROM dbo.myTable AS t
CROSS APPLY dbo.SplitSafeStrings(t.DateColumn, ',') AS s
GROUP BY LEFT(s.Item, 10);
それぞれ次の結果が得られます。
2013-07-15-12-25-11 212
2013-07-20-12-25-11 1231
2013-08-20-10-25-11 4374
2013-08-20-12-25-11 783
2013-08-21-12-25-11 783
2013-07-15 212
2013-07-20 1231
2013-08-20 5157
2013-08-21 783
(どれも質問の望ましい結果と一致しません。本当にそれらの結果が必要な場合は、サンプルデータからどのようにそれらを取得したかを説明する必要があります。7/20 対 783 に関して間違いを犯したと思います. 8/20.)