2012-04-27 3 views
0

У меня есть этот запрос, который правильно извлекает данные, но мне нужно, чтобы поле timestamp (TIM) было в другом формате, чем Day (TIM). Но я получаю ошибки, потому что запрос агрегирует этот путь.Дата форматирования даты агрегирования SQL-запроса

SELECT 
DAY(TIM) As 'Day', 
[G.TRU] = SUM(case when SEC = 'TRU' and TYP = 'GEO' then 1 else 0 end), 
[G.LOA] = SUM(case when SEC = 'LOA' and TYP = 'GEO' then 1 else 0 end), 
[G.SEA] = SUM(case when SEC = 'SEA' and TYP = 'GEO' then 1 else 0 end), 
[R.SEA] = SUM(case when SEC = 'SEA' and TYP = 'RTE' then 1 else 0 end), 
TOTAL = COUNT(TIM) 
FROM AGEO 
WHERE SRC = 'EW' 
GROUP BY DAY(TIM) 

Результат:

Day G.TRU G.LOA G.SEA R.SEA TOTAL 
----------------------------------------------- 
25  2  4  14  1  21 
26  3  0  2  9  14 
----------------------------------------------- 

Я предпочитаю 25 и 26, чтобы быть в формате YYYY-MM-DD. Есть ли способ?

+0

Что SQL версии? –

+0

Кажется, что в основном вы хотите знать [Как вернуть часть даты только из типа данных datetime SQL Server] (http://stackoverflow.com/questions/113045/how-to-return-the-date-part-only -from-a-sql-server-datetime-datatype) –

ответ

1

Нет - вы группировка по Дню (TIM), поэтому в тот же день могут быть разные месяцы и годы. Например, предположим, что у вас было две строки: первая с первого января и первая с первого февраля - они будут объединены вместе, и какой из них вы ожидаете получить для этой строки результатов?

EDIT: Хорошо, я не SQL парень, но я думаю, что вы хотите что-то вроде:

SELECT 
    CONVERT(Date, TIM) As TIMDATE, 
    [G.TRU] = SUM(case when SEC = 'TRU' and TYP = 'GEO' then 1 else 0 end), 
    [G.LOA] = SUM(case when SEC = 'LOA' and TYP = 'GEO' then 1 else 0 end), 
    [G.SEA] = SUM(case when SEC = 'SEA' and TYP = 'GEO' then 1 else 0 end), 
    [R.SEA] = SUM(case when SEC = 'SEA' and TYP = 'RTE' then 1 else 0 end), 
    TOTAL = COUNT(TIM) 
FROM AGEO 
WHERE SRC = 'EW' 
GROUP BY TIMDATE 
+0

да, это ошибка. Я хочу группировать по дням в поле метки времени, а не суммировать целое число (1-31). – greener

+0

@greener: Смотрите мое редактирование. Это может быть не совсем точно, но я считаю, что суть правильная. Синтаксис вокруг использования значения агрегации для группировки может быть неправильным, но в основном вы хотите преобразовать TIM в дату. –

+1

Действительно, я просто поиграл и нашел тот же ответ 'CONVERT (дата, TIM, 112)' Спасибо! – greener

Смежные вопросы