Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
Есть таблица, в столбцах которой записаны данные по работе оборудования на различные даты и смены. Вопрос в том, как переделать эту таблицу в формат, чтобы в столбцах справа был список оборудования и смены, сверху в строке – даты, а на пересечении строк и столбцов - время работы. Точные даты неизвестны, нужен весь календарь и все смены. Case, if и и же с ним, естественно, не подходят. Может подадите идею, как это можно реализовать? Первая таблица - исходные данные; вторая - то, что должно быть.

К сообщению приложен файл. Размер - 48Kb
5 дек 14, 15:53    [16956576]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
динамический pivot
5 дек 14, 16:00    [16956631]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
если я правильно понимаю, через динамический pivot можно перебросить уже имеющиеся даты в строку, а как быть с теми датами и сменами, которых там нет?
5 дек 14, 16:18    [16956792]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
qsc, добавить недостающие в исходные данные, как же ещё.
5 дек 14, 16:23    [16956827]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
ну да, логично....... попробую. спасибо
5 дек 14, 16:25    [16956845]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Могу посоветовать кубы и MDX/DAX.

Если SQL 2012, то сейчас есть упрощённая версия кубов DAX, с корой проще разобраться, чем с OLAP/MDX кубами.
5 дек 14, 16:48    [16957012]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
перенос сделала через динамический pivot. подскажите, пожалуйста, как добавить недостающие данные по дате и смене
8 дек 14, 12:37    [16965595]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
qsc
как добавить недостающие данные по дате

Сгенерировать таблицу(ы) со всеми датами и сменами
8 дек 14, 12:38    [16965600]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
Glory, уже так пробовала. Сделала таблицу с календарем и сменами. Но когда джойню к ней таблицу с часами работы, в итоге остаются только строки из второй таблицы, хотя использую левый джойн...
8 дек 14, 13:56    [16966060]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
qsc
хотя использую левый джойн...

Значит неправильно используете
8 дек 14, 13:57    [16966064]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
qsc
Glory, уже так пробовала. Сделала таблицу с календарем и сменами. Но когда джойню к ней таблицу с часами работы, в итоге остаются только строки из второй таблицы, хотя использую левый джойн...


может вы потом в WHERE что-то неправильно написали и у вас вместо LEFT получился INNER JOIN
8 дек 14, 13:57    [16966074]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
обычный селект, вроде ничего сложного. Проверяю на совпадение по дате и смене.
SELECT dbo.Calendar.*,REC_EQUIP_420,ELAPSED_HOURS 
FROM dbo.Calendar 
left join MSF420_HOURS on MSF420_HOURS.REV_STAT_DATE=Date and MSF420_HOURS.SHIFT=Shift
WHERE YEAR(Date)='2014' and MONTH(Date)='11'
order by Date

В итоге выводит только совпадающие данные

К сообщению приложен файл. Размер - 55Kb
8 дек 14, 14:21    [16966290]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
поле Date в какой табличке?
8 дек 14, 14:24    [16966321]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
qsc
В итоге выводит только совпадающие данные

Поле REV_STAT_DATE какого типа ?
8 дек 14, 14:26    [16966329]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
Data и Shift в Calendare
Поле REV_STAT_DATE имеет тип varchar
8 дек 14, 14:39    [16966454]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
qsc
Data и Shift в Calendare
Поле REV_STAT_DATE имеет тип varchar


хм, давайте вы тогда скрипты этих табличек опубликуете, а то у вас Date в запросе и Data в описании, как-то не вяжется
8 дек 14, 14:42    [16966476]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
какие есть, до меня созданные. в принципе datetime и varchar тут нормально дружат. он совпадения находит правильно
8 дек 14, 14:56    [16966618]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
qsc
он совпадения находит правильно

А что тогда неправильно ? Нужно угадать по части скриншота ?
8 дек 14, 14:58    [16966636]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
перевела REV_STAT_DATE в datetime - ничего не поменялось
8 дек 14, 15:02    [16966670]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
неправильно то, что он выводит не все данные. Таблица Календарь содержит все даты и смены (по 3 на каждую дату). я пытаюсь добавить к этому Календарю данные из таблицы MSF420_HOURS (там данные не на все даты и смены), чтобы получить полный Календарь со временем и оборудованием, по которым эти данные есть. Остальные поля должны быть пустыми, но должны быть, а их нет.
8 дек 14, 15:07    [16966708]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
так у вас в таком случае RIGHT OUTER JOIN
8 дек 14, 15:11    [16966725]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
qsc
неправильно то, что он выводит не все данные.

И когда вы продемонстрируете это неправильно ?
8 дек 14, 15:15    [16966749]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
qsc
Member

Откуда:
Сообщений: 48
почему? у меня же изначально Календарь главная таблица, к которой я добавляю данные...
8 дек 14, 15:16    [16966754]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
Konst_One
Member

Откуда:
Сообщений: 11540
qsc
почему? у меня же изначально Календарь главная таблица, к которой я добавляю данные...


потому:
qsc
Таблица Календарь содержит все даты и смены (по 3 на каждую дату)
8 дек 14, 15:16    [16966762]     Ответить | Цитировать Сообщить модератору
 Re: трансформация таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
qsc
неправильно то, что он выводит не все данные. Таблица Календарь содержит все даты и смены (по 3 на каждую дату). я пытаюсь добавить к этому Календарю данные из таблицы MSF420_HOURS (там данные не на все даты и смены), чтобы получить полный Календарь со временем и оборудованием, по которым эти данные есть. Остальные поля должны быть пустыми, но должны быть, а их нет.
Запрос концептуально правильный. Значит, где то ещё ошибка.

Например, у вас всё неряшливо сделано, "на авось", это тоже может вызвать ошибки.
Например:
MSF420_HOURS.SHIFT=Shift
вы связываете одно поле одной и той же таблицы, или поля разных таблиц? Из условия этого не видно.
Проставьте алиасы у таблиц, и алиасы для всех полей, которые используете. Иначе все будут путаться, включая сервер!

Во вторых, просто посмотрите данные, и сразу будет понятно, что происходит:
SELECT *
FROM dbo.Calendar 
WHERE Date='20141101'
order by Date, Shift

SELECT *
FROM MSF420_HOURS 
WHERE REV_STAT_DATE='20141101'
order by REV_STAT_DATE, Shift

В третьих, приведите уже скрипты таблиц!
8 дек 14, 15:23    [16966797]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить