Maher_ITbv Ответов: 1

Вставить сумму в другую таблицу на группы по годам SQL сервер


У меня есть..
Table_A
Table_B

INSERT INTO Table_B (Price, Modified)
SELECT SUM(Price) AS Sales, YEAR(Modified) YEAR
FROM Table_A
GROUP BY YEAR(Modified) ORDER BY YEAR

Мне нужен как этот результат

Имя-Цена-Измененная Дата
--------------------------------
НН - 1000 - 2015
cc-5000-2016 общее количество дней и месяцев за 2016 год
но вставьте эту сумму в другую таблицу как есть.
если мне придется использовать Fetch courser также доза не имеет значения

но мне нужен этот результат
НН - 1000 - 2010
СС - 5000 - 2013
НН - 1000 - 2015
СС - 5000 - 2016
Только год без месяца и дней
спасибо..

Что я уже пробовал:

SELECT SUM(Price) AS Sales, YEAR(ModifiedDate) YEAR
FROM Table_a
GROUP BY YEAR(ModifiedDate) ORDER BY YEAR


Но эта сумма во время выполнения только без вставки в Table_B

Я тоже пытался

SELECT SUM(Price ) AS Sales, DATEPART(YYYY, ModifiedDate) YEAR
FROM SalesDate
GROUP BY YEAR(ModifiedDate) ORDER BY YEAR(ModifiedDate)

SQL Manager
показывая эту ошибку...
Msg 206, Уровень 16, Состояние 2, Строка 1
Столкновение типов операндов: int несовместимо с датой

0x01AA

Похоже, вам нужно привести год к дате и времени

Maciej Los

Непонятный... Пожалуйста, приведите пример данных (table_a).

an0ther1

Как и советовал 0x01AA - я бы предположил, что вам нужно пересмотреть структуру вашей таблицы.
DATEPART (yyyy, <datevalue>) возвращает целое число, а не дату
YEAR (<datevalue & gt;) также возвращает целое число, а не дату
Если Table_B. Modified имеет тип данных Date, вам нужно будет преобразовать целое число в дату или изменить тип данных измененного столбца на Int

с уважением

1 Ответов

Рейтинг:
1

Member 7870345

Я не уверен в том, что вы имеете в виду. Я думаю, что второй столбец вставки "должен быть" датой, а год(...) возвращает целое число, поэтому ошибка завершается.

Пожалуйста, попробуйте использовать:

INSERT INTO table_b(Price, Modified) <br />
SELECT SUM(price) as sales, convert(datetime,CONVERT(char(4),YEAR(Modified))+'-01-01T00:00:00') as Modified from table_a<br />
group by convert(datetime,CONVERT(char(4),YEAR(Modified))+'-01-01T00:00:00')<br />
order by 2
.

Объяснение:
Год (Изменено) верните int с годом изменения, но CONVERT (char(4), YEAR(fecha)) преобразует этот год в строку (например, "2017").
Затем CONVERT(char(4), YEAR (Modified))+'-01-01T00:00:00',- это строка, представляющая первый день этого года в 0: 00 часов (то есть"2017-01-01T00:00:00".
За последние convert (datetime, CONVERT(char(4), YEAR (Modified))+'-01-01T00:00:00') преобразует эту строку в дату-время, соответствующее первому дню года.
(Обратите внимание, что вид строки aaaa-mm-ddThh:mm:ss не зависит от культуры или идиомы, поэтому всегда интерпретируется правильно).