Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / при агрегации по датам выходят только NULL / 11 сообщений из 11, страница 1 из 1
24.12.2018, 13:06
    #39752180
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
Create table final1
(
product_id int,
shop_code nvarchar(20),
doc_date datetime,
diff2 int,
diff1 int,
BASEITLOG int,
base int,
TotalSum int
)
insert into final1 values 

(11628,'00664НСК','2015-01-01 00:00:00.000',0,208,318,318,526),
(11628,'00664НСК','2015-02-01 00:00:00.000',24,290,345,369,659),
(11628,'00664НСК','2015-03-01 00:00:00.000',12,0,503,515,515),
(11628,'00664НСК','2015-04-01 00:00:00.000',0,273,264,264,537),
(11628,'00664НСК','2015-05-01 00:00:00.000',0,195,266,266,461),
(11628,'00664НСК','2015-06-01 00:00:00.000',0,0,265,265,265),
(11628,'00664НСК','2015-07-01 00:00:00.000',482,0,231,713,713),
(11628,'00664НСК','2015-08-01 00:00:00.000',182,0,333,515,515),
(11628,'00664НСК','2015-09-01 00:00:00.000',287,0,376,663,663),
(11628,'00664НСК','2015-10-01 00:00:00.000',180,0,232,412,412),
(11628,'00664НСК','2015-11-01 00:00:00.000',0,0,197,197,197),
(11628,'00664НСК','2015-12-01 00:00:00.000',596,0,952,1548,1548),
(11628,'00664НСК','2016-01-01 00:00:00.000',0,0,375,375,375),
(11628,'00664НСК','2016-02-01 00:00:00.000',256,164,252,508,672),
(11628,'00664НСК','2016-03-01 00:00:00.000',0,0,267,267,267),
(11628,'00664НСК','2016-04-01 00:00:00.000',0,0,176,176,176),
(11628,'00664НСК','2016-05-01 00:00:00.000',0,0,181,181,181),
(11628,'00664НСК','2016-06-01 00:00:00.000',0,0,236,236,236),
(11628,'00664НСК','2016-07-01 00:00:00.000',16,455,208,224,679),
(11628,'00664НСК','2016-08-01 00:00:00.000',0,0,185,185,185),
(11628,'00664НСК','2016-09-01 00:00:00.000',0,0,196,196,196),
(11628,'00664НСК','2016-10-01 00:00:00.000',0,0,201,201,201),
(11628,'00664НСК','2016-11-01 00:00:00.000',0,454,207,207,661),
(11628,'00664НСК','2016-12-01 00:00:00.000',0,0,275,275,275),
(11628,'00664НСК','2017-01-01 00:00:00.000',0,212,116,116,328),
(11628,'00664НСК','2017-02-01 00:00:00.000',0,170,125,125,295),
(11628,'00664НСК','2017-03-01 00:00:00.000',0,0,242,242,242),
(11628,'00664НСК','2017-04-01 00:00:00.000',0,0,136,136,136),
(11628,'00664НСК','2017-05-01 00:00:00.000',0,0,193,193,193),
(11628,'00664НСК','2017-06-01 00:00:00.000',251,0,219,470,470),
(11628,'00664НСК','2017-07-01 00:00:00.000',0,0,183,183,183),
(11628,'00664НСК','2017-08-01 00:00:00.000',0,11,219,219,230),
(11628,'00664НСК','2017-09-01 00:00:00.000',0,204,194,194,398),
(11628,'00664НСК','2017-10-01 00:00:00.000',0,81,204,204,285),
(11628,'00664НСК','2017-11-01 00:00:00.000',0,60,191,191,251),
(11628,'00664НСК','2017-12-01 00:00:00.000',16,207,251,267,474),
(11628,'00664НСК','2018-01-01 00:00:00.000',0,0,148,148,148),
(11628,'00664НСК','2018-02-01 00:00:00.000',0,0,164,164,164),
(11628,'00664НСК','2018-03-01 00:00:00.000',0,0,277,277,277),
(11628,'00664НСК','2018-04-01 00:00:00.000',0,0,137,137,137),
(11628,'00664НСК','2018-05-01 00:00:00.000',0,274,194,194,468),
(11628,'00664НСК','2018-06-01 00:00:00.000',12,30,184,196,226),
(11628,'00664НСК','2018-07-01 00:00:00.000',0,0,134,134,134),
(11628,'00664НСК','2018-08-01 00:00:00.000',0,32,116,116,148),
(11628,'00664НСК','2018-09-01 00:00:00.000',0,115,117,117,232)

;With CTE
AS
(
SELECT *,YEAR(doc_date) AS DocYr,DATENAME(mm,doc_date) AS DocMnth
FROM final1
)
SELECT variable,product_id,shop_code,DocYr AS [Year],
MAX(CASE WHEN DocMnth = 'January' THEN val END) AS Jan,
MAX(CASE WHEN DocMnth = 'February' THEN val END) AS Feb,
MAX(CASE WHEN DocMnth = 'March' THEN val END) AS Mar,
MAX(CASE WHEN DocMnth = 'April' THEN val END) AS Apr,
MAX(CASE WHEN DocMnth = 'May' THEN val END) AS May,
MAX(CASE WHEN DocMnth = 'June' THEN val END) AS Jun,
MAX(CASE WHEN DocMnth = 'July' THEN val END) AS Jul,
MAX(CASE WHEN DocMnth = 'August' THEN val END) AS Aug,
MAX(CASE WHEN DocMnth = 'September' THEN val END) AS Sep,
MAX(CASE WHEN DocMnth = 'October' THEN val END) AS Oct,
MAX(CASE WHEN DocMnth = 'November' THEN val END) AS Nov,
MAX(CASE WHEN DocMnth = 'December' THEN val END) AS [Dec]
FROM
(
SELECT product_id ,
shop_code ,
diff2 ,
diff1 ,
BASEITLOG ,
base ,
TotalSum ,DocYr,DocMnth
FROM CTE
)c
UNPIVOT(val FOR  variable IN ([diff2],[diff1],[BASEITLOG],[base],[TotalSum]))u
GROUP BY variable,product_id,shop_code,DocYr




у меня получаются нулы
variable product_id shop_code Year Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
base 11628 00664НСК 2015 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL

Но это неправильный расчет, там должны быть агрегированные значения.Как сделать правильно?
...
Рейтинг: 0 / 0
24.12.2018, 13:11
    #39752185
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Вы же проверили, что вам DATENAME(mm,doc_date) возвращает?
...
Рейтинг: 0 / 0
24.12.2018, 13:13
    #39752187
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Kontox,

SET LANGUAGE ENGLISH
...
Рейтинг: 0 / 0
24.12.2018, 13:18
    #39752190
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
KontoxКак сделать правильно?Идбавится от зависимости от языка:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
;With CTE
AS
(
SELECT *,YEAR(doc_date) AS DocYr,month(doc_date) AS DocMnth
FROM final1
)
SELECT variable,product_id,shop_code,DocYr AS [Year],
MAX(CASE WHEN DocMnth = 1 THEN val END) AS Jan,
MAX(CASE WHEN DocMnth = 2 THEN val END) AS Feb,
MAX(CASE WHEN DocMnth = 3 THEN val END) AS Mar,
MAX(CASE WHEN DocMnth = 4 THEN val END) AS Apr,
MAX(CASE WHEN DocMnth = 5 THEN val END) AS May,
MAX(CASE WHEN DocMnth = 6 THEN val END) AS Jun,
MAX(CASE WHEN DocMnth = 7 THEN val END) AS Jul,
MAX(CASE WHEN DocMnth = 8 THEN val END) AS Aug,
MAX(CASE WHEN DocMnth = 9 THEN val END) AS Sep,
MAX(CASE WHEN DocMnth = 10 THEN val END) AS Oct,
MAX(CASE WHEN DocMnth = 11 THEN val END) AS Nov,
MAX(CASE WHEN DocMnth = 12 THEN val END) AS [Dec]
...
Рейтинг: 0 / 0
24.12.2018, 13:47
    #39752218
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Если я меняю или язык или month
Сообщение 245, уровень 16, состояние 1, строка 3
Ошибка преобразования значения varchar "January" в тип данных int.
...
Рейтинг: 0 / 0
24.12.2018, 13:49
    #39752221
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
KontoxЕсли я меняю или язык или month
Сообщение 245, уровень 16, состояние 1, строка 3
Ошибка преобразования значения varchar "January" в тип данных int.

а вы смотрите только ту часть кода, которую выделил invm?
не заметили, что в его примере вместо названий месяцев стоят их номера?
...
Рейтинг: 0 / 0
24.12.2018, 14:02
    #39752246
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
А Я весь код скопировал. Просто январь посчитался, остальные нулы.
...
Рейтинг: 0 / 0
24.12.2018, 14:04
    #39752249
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
у меня сложилось впечатление, что код работаетт yyyy-dd-mm, вместе yyyy-mm
...
Рейтинг: 0 / 0
24.12.2018, 15:00
    #39752320
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Kontoxу меня сложилось впечатление, что код работаетт yyyy-dd-mm, вместе yyyy-mm


Я поставил SET LANGUAGE ENGLISH перед вашим запросом не меняя ни строчки и все сработало.
...
Рейтинг: 0 / 0
24.12.2018, 15:30
    #39752344
Kontox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
да теперь и у меня сработало, когда sql перегрузил
...
Рейтинг: 0 / 0
24.12.2018, 18:28
    #39752428
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
при агрегации по датам выходят только NULL
Kontox,

определить номер месяца числом религия не позволяет, что ли? Вам же пример написали.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / при агрегации по датам выходят только NULL / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]