Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Здравствуйте!

Есть две таблицы.

Таблица1. Фрагмент по одной ТТ
КлиентТТSKUОтгрузкиMeра1 по ТТМера2 по ТТТип
Клиент1ТТ1SKU150200100Тип1
Клиент1ТТ1SKU247200100Тип1
Клиент1ТТ1SKU369200100Тип1
Клиент1ТТ1SKU485200100Тип1


Таблица2. Фрагмент по одной ТТ
КлиентТТSKUОтгрузкиMeра3 по ТТМера4 по ТТТип
Клиент1ТТ1SKU515270310Тип2
Клиент1ТТ1SKU617270310Тип2
Клиент1ТТ1SKU716270310Тип2
Клиент1ТТ1SKU829270310Тип2


Если задать такое условие
Таблица1.TT=Таблица2.ТТ AND Таблица1.SKU = Таблица2.SKU

или
Таблица1.TT=Таблица2.ТТ AND Таблица1.Тип = Таблица2.Тип

то результатом полного соединения будет таким

КлиентТТSKUОтгрузкиMeра1 по ТТМера2 по ТТMeра3 по ТТМера4 по ТТТип
Клиент1ТТ1SKU150200100Тип1
Клиент1ТТ1SKU247200100Тип1
Клиент1ТТ1SKU369200100Тип1
Клиент1ТТ1SKU485200100Тип1
Клиент1ТТ1SKU515270310Тип2
Клиент1ТТ1SKU617270310Тип2
Клиент1ТТ1SKU716270310Тип2
Клиент1ТТ1SKU829270310Тип2


А мне надо такой результат

КлиентТТSKUОтгрузкиMeра1 по ТТМера2 по ТТMeра3 по ТТМера4 по ТТТип
Клиент1ТТ1SKU150200100270310Тип1
Клиент1ТТ1SKU247200100270310Тип1
Клиент1ТТ1SKU369200100270310Тип1
Клиент1ТТ1SKU485200100270310Тип1
Клиент1ТТ1SKU515200100270310Тип2
Клиент1ТТ1SKU617200100270310Тип2
Клиент1ТТ1SKU716200100270310Тип2
Клиент1ТТ1SKU829200100270310Тип2


Важно чтобы по ТТ были одинаковые значения для соответствующей меры.

В SQL запросе это можно так сделать? Если да, то как?
13 мар 16, 11:33    [18925076]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
Glory
Member

Откуда:
Сообщений: 104760
ferzmikk
А мне надо такой результат

Что с ним будет, когда число SKU будет разным и их значения будут совпадать
например

SKU1
SKU2
SKU3
SKU4

и

SKU4
SKU5

Сообщение было отредактировано: 13 мар 16, 12:10
13 мар 16, 12:10    [18925114]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Glory
ferzmikk
А мне надо такой результат

Что с ним будет, когда число SKU будет разным и их значения будут совпадать
например

SKU1
SKU2
SKU3
SKU4

и

SKU4
SKU5

Будет то же самое. И не важно, совпадает или не совпадает количество SKU в первой и второй таблице.
А что касается совпадение значений, то теоретически не должны. Хотя бы не помешало подстраховаться - вставить проверку, если вдруг совпадают значения.
13 мар 16, 12:28    [18925126]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
Glory
Member

Откуда:
Сообщений: 104760
ferzmikk
Будет то же самое. И не важно, совпадает или не совпадает количество SKU в первой и второй таблице.

Не может там быть тоже самое.
Потому что, в одном поле результата нельзя вывести одновременно два поля таблиц
Вот в Отгрузки будет
SKU4 85
и
SKU4 15
а что будет в результатах ?
13 мар 16, 12:36    [18925137]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Glory
ferzmikk
Будет то же самое. И не важно, совпадает или не совпадает количество SKU в первой и второй таблице.

Не может там быть тоже самое.
Потому что, в одном поле результата нельзя вывести одновременно два поля таблиц
Вот в Отгрузки будет
SKU4 85
и
SKU4 15
а что будет в результатах ?


В данной задаче не должно такого быть, иначе нарушается логика. Но если что будет одновременно одинаково, то пусть просуммирует отгрузки.
13 мар 16, 13:08    [18925193]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
Glory
Member

Откуда:
Сообщений: 104760
вот такая последовательность действий
UNPIVOT - UNION ALL - GROUP BY - PIVOT
13 мар 16, 13:24    [18925210]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Glory
вот такая последовательность действий
UNPIVOT - UNION ALL - GROUP BY - PIVOT

Как мне тут правильно написать? Не обращайте внимание на содержание MDX-запроса.

SELECT 
Cast(F1."[ТТ].[ТТ].[ТТ].[MEMBER_CAPTION]" AS Varchar(100)) AS ТТ,
Cast(F1."[SKU].[SKU].[SKU].[MEMBER_CAPTION]" AS Varchar(100)) AS SKU,
Cast(F1."[Measures].[Отгрузки шт]" AS varchar(100)) as Отгрузки,
Cast(F1."[Measures].[Мера1]" AS varchar(100)) AS Мера1,
Cast(F1."[Measures].[Мера2]" AS varchar(100)) AS Мера2,
Cast(F2."[Measures].[Мера3]" AS varchar(100)) AS Мера3,
Cast(F2."[Measures].[Мера4]" AS varchar(100)) AS Мера4
FROM
OPENROWSET(...,  ...,
    'SELECT
    NON EMPTY
    [ТТ].[ТТ].[ТТ]*
    [SKU].[SKU].[SKU]
    ON ROWS,
    {[Measures].[Отгрузки шт],
    [Measures][Мера1],
    [Measures][Мера2]} ON COLUMNS
    FROM Profit
    WHERE
    [Время].[Месяц].&[2015-12-01T00:00:00]')  AS F1
FULL JOIN
OPENROWSET(...,  ...,
    'SELECT
    NON EMPTY
    [ТТ].[ТТ].[ТТ]*
    [SKU].[SKU].[SKU]
    ON ROWS,
    {[Measures].[Отгрузки шт],
    [Measures][Мера3],
    [Measures][Мера4]} ON COLUMNS 
    FROM Profit
    WHERE
    [Время].[Месяц].&[2015-12-01T00:00:00]') AS F2
ON
(
CAST(F1."[ТТ].[ТТ].[ТТ].[MEMBER_CAPTION]" AS Varchar(100)) = CAST(F2."[ТТ].[ТТ].[ТТ].[MEMBER_CAPTION]" AS Varchar(100))
AND
CAST(F1."[SKU].[SKU].[SKU].[MEMBER_CAPTION]" AS Varchar(100)) = CAST(F2."[SKU].[SKU].[SKU].[MEMBER_CAPTION]" AS Varchar(100))
)
13 мар 16, 15:48    [18925436]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
ferzmikk,

это не TSQL
13 мар 16, 16:01    [18925458]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
Glory
Member

Откуда:
Сообщений: 104760
ferzmikk
Как мне тут правильно написать?

руками. для каждого из посоветованных этапов

ferzmikk
Не обращайте внимание на содержание MDX-запроса.

Написать сразу один нужный MDX запрос не хотите ?
13 мар 16, 16:51    [18925535]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Glory
Написать сразу один нужный MDX запрос не хотите ?

В данной ситуации к сожалению так не возможно, потому что у двух сравниваемых полей (измерений) из каждой таблицы соответствующие значения разные. Поэтому сделал так: с определенными условиями выгрузил одну таблицу, и с другими условиями другую таблицу. И В SQL объединяю их.
14 мар 16, 07:37    [18926627]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
ferzmikk
Member

Откуда:
Сообщений: 2066
Glory
вот такая последовательность действий
UNPIVOT - UNION ALL - GROUP BY - PIVOT

Может так надо?

UNPIVOT (Таблица1) - UNION ALL - UNPIVOT (Таблица2) - GROUP BY - PIVOT
14 мар 16, 07:40    [18926629]     Ответить | Цитировать Сообщить модератору
 Re: Соединение таблиц с заполнениями  [new]
Glory
Member

Откуда:
Сообщений: 104760
ferzmikk
Может так надо?

UNPIVOT (Таблица1) - UNION ALL - UNPIVOT (Таблица2) - GROUP BY - PIVOT

Я описал последовательность действий, а не структуру единого запроса

UNPIVOT, например, тоже можно сделать через UNION-ы или cross join
14 мар 16, 09:20    [18926732]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить