|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.08.2019, 14:13 | #1 |
Новичок
Джуниор
Регистрация: 08.08.2019
Сообщений: 5
|
Применение PIVOT в t-sql
Господа!
Помогите ответить на один важный для меня вопрос. Вот фрагмент таблицы "ПродажиПериода": КодСклада КодНоменклатуры НомерПериода КоличествоПродано КоличествоМинус 10 10485263 1 1.00 0.00 10 10485263 2 2.00 0.00 10 10485263 3 3.00 -1.00 10 10485263 4 4.00 0.00 Вот код, который выбирает эти данные в удобочитаемом виде: select kk, [1] as p1, [2] as p2, [3] as p3, [4] as p4, [5] as p5, [6] as p6 from ( select cast(КодСклада as varchar(10)) + '/' + cast(КодНоменклатуры as varchar(10)) as kk, [1], [2], [3], [4], [5], [6] from dbo.ПродажиПериода pivot ( sum(КоличествоПродано) for НомерПериода in ([1], [2], [3], [4], [5], [6]) ) as p ) as d where kk = '10/10485263' Вот результат работы этого кода: kk p1 p2 p3 p4 p5 p6 10/10485263 NULL NULL 3.00 NULL NULL NULL 10/10485263 1.00 2.00 NULL 4.00 NULL NULL Вопрос: почему этот код возвращает ДВЕ записи, а не ОДНУ, как я ожидал? Ответьте, пожалуйста, кто может. Заранее благодарен. |
08.08.2019, 14:59 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Результат группируется не только по КодСклада и КодНоменклатуры, но и по полю КоличествоМинус. 0 вместо -1 засунь - по идее должна одна запись в результате быть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
08.08.2019, 15:23 | #3 |
Новичок
Джуниор
Регистрация: 08.08.2019
Сообщений: 5
|
Pivot в t-sql
Спасибо, Аватар.
Я предполагал, что в этом причина (не проверял, но почти уверен), но задал вопрос в "общем виде". Теперь вопрос "детальный": я не просил SQL группировать данные по полю КоличествоМинус. Зачем SQL это сделал? Получается странный вывод. PIVOT корректно можно применять к таблицам, в которых есть 3 группы полей: 1. Поле, по которому выполняется агрегирование 2. Поля, которые выводятся в "графах" 3. Поле(я), которые участвуют в агрегатной функции Других не может быть? Как минимум - странно... |
08.08.2019, 15:28 | #4 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Pivot вообще не от мира сего с дубовым синтаксисом не вписывающимся в привычный sql ) И транспонирование не задача sql сервера, от слова совсем )
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 08.08.2019 в 15:33. |
|
08.08.2019, 15:34 | #5 |
Новичок
Джуниор
Регистрация: 08.08.2019
Сообщений: 5
|
Аватар, всё подтвердилось.
КоличествоМинус = 0 - и проблема исчезла. Только вопрос остался: почему поле, НИ в чём не участвующее (имея в виду синтаксис и семантику PIVOT), тем не менее влияет на результат? |
08.08.2019, 17:01 | #6 |
Новичок
Джуниор
Регистрация: 08.08.2019
Сообщений: 5
|
PIVOT t-sql
Специально для АВАТАР.
Вы откликнулись на мою проблему и мне хочется представить для вас её решение, которое предложили на другом сайте. Мне кажется, вам будет любопытно его увидеть. Автор этого "шедевра" искусственно сузил таблицу dbo.ПродажиПериода до четырёх полей, выбросив поле КоличествоМинус. select kk, [1] as p1, [2] as p2, [3] as p3, [4] as p4, [5] as p5, [6] as p6 from ( select cast(КодСклада as varchar(10)) + '/' + cast(КодНоменклатуры as varchar(10)) as kk, [1], [2], [3], [4], [5], [6] from (select КодСклада, КодНоменклатуры, НомерПериода, КоличествоПродано from dbo.ПродажиПериода) a pivot ( sum(a.КоличествоПродано) for a.НомерПериода in ([1], [2], [3], [4], [5], [6]) ) as p ) as d where kk = '10/10485263' Последний раз редактировалось AleksFromBK; 08.08.2019 в 17:04. |
08.08.2019, 18:07 | #7 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Чего тут искусственного? Вместо таблицы в запросе вложенный запрос, со своим набором полей, обычное решение )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
PIVOT & СТАТИСТИКА % ПРОЦЕНТЫ | Евгений Таб | Microsoft Office Excel | 3 | 24.02.2015 10:12 |
Pivot Table через C# | Iriss | C# (си шарп) | 0 | 14.10.2014 14:50 |
Дополнительные вычислений в Power Pivot | yailya | Microsoft Office Excel | 2 | 01.10.2014 14:37 |
C# Excel Pivot table | CWD | C# (си шарп) | 1 | 16.07.2014 00:20 |
Pivot Run-time Error 1004 | stream71 | Microsoft Office Excel | 0 | 07.09.2009 15:41 |