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

Откуда:
Сообщений: 31
Подскажите пож, как из двух таблиц

Таблица списка характеристик:
WITH [CTE] AS (
          SELECT 'Вес' as 'Признак'
UNION ALL SELECT 'Скорость'
UNION ALL SELECT 'Дальность'


И таблицы фактов
SELECT [Объект], [Признак], [Значение]

Она содержит объекты, по которым проставлена только часть значений признаков.
Нужно получить по каждому объекту список всех признаков с [CTE], включая отсутствующие в таблице фактов .


Сейчас так
Объект  Характеристика  Значение
Лампа Вес 100

Нужно
Объект  Характеристика  Значение
Лампа Вес 100
Лампа Скорость NULL
Лампа Дальность NULL

Подскажите, пожалуйста, каким способом получить нужны результат?
21 авг 18, 13:01    [21649342]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
left join учили?
21 авг 18, 13:04    [21649347]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
982183,

скорее, cross join + case
21 авг 18, 13:05    [21649353]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Да. согласен.
21 авг 18, 13:07    [21649356]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Хотя зачем тут case?

Сначала создаем через cross join
"Объект" "Характеристика"

А потом через left join присоединяем имеющиеся "Значение"
21 авг 18, 13:13    [21649363]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
982183
Хотя зачем тут case?

Сначала создаем через cross join
"Объект" "Характеристика"

А потом через left join присоединяем имеющиеся "Значение"

детка предпочитает грубые отношения с сервером?
21 авг 18, 13:16    [21649370]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
Я старый извращенец, предпочитающий в учебных задачах наглядность производительности
21 авг 18, 13:17    [21649373]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
982183
Я старый извращенец, предпочитающий в учебных задачах наглядность производительности

глупость не приравнивайте к наглядности
21 авг 18, 13:19    [21649382]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
jango77
Member

Откуда:
Сообщений: 31
Делал через CROSS JOIN
Но получается

Объект  Характеристика  Значение
Лампа Вес 100
NULL Скорость NULL
NULL Дальность NULL

а нужно

Объект  Характеристика  Значение
Лампа Вес 100
Лампа Скорость NULL
Лампа Дальность NULL
21 авг 18, 13:22    [21649392]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
jango77,

не стесняйтесь, покажите, что именно делали?
21 авг 18, 13:23    [21649397]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
jango77
Делал через CROSS JOIN
Но получается

Объект  Характеристика  Значение
Лампа Вес 100
NULL Скорость NULL
NULL Дальность NULL

а нужно

Объект  Характеристика  Значение
Лампа Вес 100
Лампа Скорость NULL
Лампа Дальность NULL

не то CROSS JOIN-ите
21 авг 18, 13:23    [21649399]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
jango77
Member

Откуда:
Сообщений: 31
TaPaK,

та уже понятно по результату

подскажите пож что с чем нужно
21 авг 18, 13:26    [21649416]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
jango77
Member

Откуда:
Сообщений: 31
Посетитель
jango77,

не стесняйтесь, покажите, что именно делали?


Поверьте, пример значительно наглядней))
21 авг 18, 13:27    [21649420]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
jango77
TaPaK,

та уже понятно по результату

подскажите пож что с чем нужно

большой выбор?
21 авг 18, 13:27    [21649421]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
jango77
TaPaK,

та уже понятно по результату



ежели все понятно, то и правьте на здоровье.
а уж пришли к доктору, так будьте добры.
21 авг 18, 13:30    [21649429]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
jango77
Member

Откуда:
Сообщений: 31
TaPaK
большой выбор?


да подскажите пож, горит задача) нужно были час назад сделать. Но вот чтото затупил и не двигаюсь
Какие поля в cross join?
21 авг 18, 13:30    [21649431]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
982183
Member

Откуда: VL
Сообщений: 3350
selec t1.Объект,  t1.Характеристика  факт.Значение 
from ( select характеристика.признак, факт.объект from характеристика, факт) as t1
left join факт
on факт.объект=t1.объект and факт.Характеристика=t1.Характеристика
21 авг 18, 13:31    [21649435]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
982183,
стошнило.


WITH [CTE] AS (
          SELECT 'Вес' as 'Признак'
UNION ALL SELECT 'Скорость'
UNION ALL SELECT 'Дальность'
)
SELECT 
	a.[Объект], 
	b.[Признак], 
	[Значение] = (CASE a.[Признак] = b.[Признак] THEN a.[Значение] ELSE 0 END)
FROM [fact] a 
CROSS JOIN CTE b
21 авг 18, 13:36    [21649452]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
TaPaK
982183,
стошнило.


WITH [CTE] AS (
          SELECT 'Вес' as 'Признак'
UNION ALL SELECT 'Скорость'
UNION ALL SELECT 'Дальность'
)
SELECT 
	a.[Объект], 
	b.[Признак], 
	[Значение] = (CASE a.[Признак] = b.[Признак] THEN a.[Значение] ELSE 0 END)
FROM [fact] a 
CROSS JOIN CTE b


чутка не так

select f.[Объект], c.[Признак], max(case when c.[Признак] = f.[Признак] then f.[Значение] end)
  from Fact f
 cross join cte c
 group by f.[Объект], c.[Признак]
21 авг 18, 13:38    [21649458]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
может человеку надо про ключи пояснить ?? Бо так и будет всю жизнь лефто кросс джойнить
21 авг 18, 13:38    [21649461]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Посетитель,

да, сразу написал SUM потом решил, а зачем :)
21 авг 18, 13:41    [21649471]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
Посетитель
Member

Откуда:
Сообщений: 1384
Maxx
может человеку надо про ключи пояснить ?? Бо так и будет всю жизнь лефто кросс джойнить


какие такие ключи?
отродясь монтировкой пользовался, ни разу не подвела.
21 авг 18, 13:44    [21649478]     Ответить | Цитировать Сообщить модератору
 Re: Соединение двух таблиц  [new]
jango77
Member

Откуда:
Сообщений: 31
TaPaK, Посетитель, спасибо за помощь!
:)
21 авг 18, 14:02    [21649519]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить