Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение таблиц / 13 сообщений из 13, страница 1 из 1
06.08.2018, 22:51
    #39683993
mbs92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Здравствуйте, такой вопрос.
Есть Table1, в которую каждый день в 9 утра записываются 4 строчки с данными, ее вид:
id
Name
Kolvo
Price
Date

И есть Table2, в которую каждый день в 9 утра записывается одна строчка с данными, ее вид:
id
Marka
Znachenie
Date

Можно ли обьединить таблицы таким образом, чтобы строчки из Table2, объединялись с первой из четырёх строк Table1?
Примерно так:

id name kolvo price marka znachenie date
1. M1. 100. 250. P1. 6000. 06-08-2018
2. M2. 140. 250. Null. Null. Null
3. M3. 301. 350. Null. Null. Null
4. M4. 400. 900. Null. Null. Null
5. M1. 100. 250. P1. 8000. 07-08-2018
6. M2. 140. 250. Null. Null. Null
7. M3. 301. 350. Null. Null. Null
8. M4. 400. 900. Null. Null. Null
...
Рейтинг: 0 / 0
06.08.2018, 23:44
    #39684001
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
mbs92Можно ли обьединить таблицы таким образом, чтобы строчки из Table2, объединялись с первой из четырёх строк Table1?Да, кросс-джойн с топ 1 из Table1
...
Рейтинг: 0 / 0
07.08.2018, 00:29
    #39684008
mbs92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
alexeyvg,

Поправьте если я не прав, но ведь при данном запросе строка из второй таблицы, все время будет объединятся тупо с первой строкой из table1?
А мне нужно чтобы новая строчка из table2 объединялась с каждой четвёртой из table1
...
Рейтинг: 0 / 0
07.08.2018, 01:51
    #39684016
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
mbs92Поправьте если я не прав, но ведь при данном запросе строка из второй таблицы, все время будет объединятся тупо с первой строкой из table1?Да. Вы же хотите, цитирую: "чтобы строчки из Table2, объединялись с первой из четырёх строк Table1"?
mbs92А мне нужно чтобы новая строчка из table2 объединялась с каждой четвёртой из table1Это тоже не очень понятная формулировка :-)
...
Рейтинг: 0 / 0
07.08.2018, 02:57
    #39684017
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
mbs92А мне нужно чтобы новая строчка из table2 объединялась с каждой четвёртой из table1

Тогда это выглядит вот так:
id name kolvo price marka znachenie date1 M1 100 250 P1 6000 06-08-20182 M2 140 250 P1 6000 06-08-20183 M3 301 350 P1 6000 06-08-20184M4 400 900 P1 6000 06-08-20185 M1 100 250 P1 8000 07-08-20186 M2 140 250 P1 8000 07-08-20187 M3 301 350 P1 8000 07-08-20188 M4 400 900 P1 8000 07-08-2018
...
Рейтинг: 0 / 0
07.08.2018, 03:06
    #39684019
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Вру. это полное объединение.

mbs92Можно ли обьединить таблицы таким образом, чтобы строчки из Table2, объединялись с первой из четырёх строк Table1?
mbs92А мне нужно чтобы новая строчка из table2 объединялась с каждой четвёртой из table1

Так с первой или с четвертой?

Впрочем без разницы.
Объединение с условием name="M1" (если с первой) или name="M4" если с четвертой
+ union all с фильтром по первой таблице name<>="M1"(если с первой) или name<>"M4" если с четвертой

И не забыть добавить недостающие поля
...
Рейтинг: 0 / 0
07.08.2018, 03:44
    #39684020
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
"В лоб" получилось вот так


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT table1.ID, table1.name ,table1.KOLVO, table1.PRICE,
       table2.marka, table2.znachenie, table1.date
FROM TABLE1, TABLE2
  WHERE TABLE1.NAME='M1' AND TABLE1.DATE=TABLE2.DATE
union all
SELECT table1.ID, table1.name ,table1.KOLVO, table1.PRICE,
       null as marka, null as znachenie, null as date
FROM TABLE1 
  WHERE TABLE1.NAME<>'M1' 
  order by table1.ID



http://sqlfiddle.com/#!18/bd2a7/16

но явно тут что-то не так с постановкой.
ибо теряем дату в остальных строках
...
Рейтинг: 0 / 0
07.08.2018, 04:36
    #39684021
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
mbs92,

нумеруете обе выборки при помощи ROW_NUBER() OVER() (если в ID гарантированно нет пропусков - можете использовать его, но лучше перестраховаться),
лево-СОЕДИНЯЕТЕ полученный наборы данных (от первой таблице - ко второй) по полю-нумератору и MOD-у + целочисленному делению на 4:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with
  xT1 as 
    (
      select t.*, row_number() over(order by id) as rn from table1 t
    )
, xT2 as 
    (
      select t.*, row_number() over(order by id) as rn from table2 t
    )
select *
 from xT1
 left join xT2
   on xT1.rn/4 + 1 = xT2.rn
  and xT1.rn%4 = 1



тестовые данные и проверка
...
Рейтинг: 0 / 0
07.08.2018, 05:19
    #39684023
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Согласен, с left join правильнее.

Код: sql
1.
2.
3.
4.
5.
6.
select table1.ID, table1.name ,table1.KOLVO, table1.PRICE,
       table2.marka, table2.znachenie, table2.date
 from table1 
 left join table2
   on table1.date = table2.date
  and table1.name= 'M1'
...
Рейтинг: 0 / 0
24.09.2018, 12:38
    #39706924
mbs92
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
982183,

Получилось так как вы сказали, но если за одну дату несколько записей, то начинается дублирование строк. Можно как то исправить запрос, чтобы дублирования не было?
...
Рейтинг: 0 / 0
24.09.2018, 13:26
    #39706960
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Сначала надо понять, какие данные за один день данных надо оставить.
...
Рейтинг: 0 / 0
25.09.2018, 04:26
    #39707365
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Или просто объясни, что ты хочешь видеть в конечных результатах.

http://sqlfiddle.com/#!18/07240/1
...
Рейтинг: 0 / 0
27.09.2018, 04:42
    #39708967
982183
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объединение таблиц
Дубли у тебя в Table1 или в Table2?
Или в обоих?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Объединение таблиц / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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