Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
jango77 Member Откуда: Сообщений: 41 |
Подскажите пож, как из двух таблиц Таблица списка характеристик: WITH [CTE] AS ( SELECT 'Вес' as 'Признак' UNION ALL SELECT 'Скорость' UNION ALL SELECT 'Дальность' И таблицы фактов SELECT [Объект], [Признак], [Значение] Она содержит объекты, по которым проставлена только часть значений признаков. Нужно получить по каждому объекту список всех признаков с [CTE], включая отсутствующие в таблице фактов . Сейчас так Объект Характеристика Значение Нужно Объект Характеристика Значение Подскажите, пожалуйста, каким способом получить нужны результат? |
21 авг 18, 13:01 [21649342] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
left join учили? |
21 авг 18, 13:04 [21649347] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
982183, скорее, cross join + case |
21 авг 18, 13:05 [21649353] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Да. согласен. |
21 авг 18, 13:07 [21649356] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Хотя зачем тут case? Сначала создаем через cross join "Объект" "Характеристика" А потом через left join присоединяем имеющиеся "Значение" |
21 авг 18, 13:13 [21649363] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
детка предпочитает грубые отношения с сервером? |
||
21 авг 18, 13:16 [21649370] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
Я старый извращенец, предпочитающий в учебных задачах наглядность производительности |
21 авг 18, 13:17 [21649373] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
глупость не приравнивайте к наглядности |
||
21 авг 18, 13:19 [21649382] Ответить | Цитировать Сообщить модератору |
jango77 Member Откуда: Сообщений: 41 |
Делал через CROSS JOIN Но получается Объект Характеристика Значение а нужно Объект Характеристика Значение |
21 авг 18, 13:22 [21649392] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
jango77, не стесняйтесь, покажите, что именно делали? |
21 авг 18, 13:23 [21649397] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
не то CROSS JOIN-ите |
||
21 авг 18, 13:23 [21649399] Ответить | Цитировать Сообщить модератору |
jango77 Member Откуда: Сообщений: 41 |
TaPaK, та уже понятно по результату подскажите пож что с чем нужно |
21 авг 18, 13:26 [21649416] Ответить | Цитировать Сообщить модератору |
jango77 Member Откуда: Сообщений: 41 |
Поверьте, пример значительно наглядней)) |
||
21 авг 18, 13:27 [21649420] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
большой выбор? |
||
21 авг 18, 13:27 [21649421] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
ежели все понятно, то и правьте на здоровье. а уж пришли к доктору, так будьте добры. |
||
21 авг 18, 13:30 [21649429] Ответить | Цитировать Сообщить модератору |
jango77 Member Откуда: Сообщений: 41 |
да подскажите пож, горит задача) нужно были час назад сделать. Но вот чтото затупил и не двигаюсь Какие поля в cross join? |
||
21 авг 18, 13:30 [21649431] Ответить | Цитировать Сообщить модератору |
982183 Member Откуда: VL Сообщений: 3374 |
selec t1.Объект, t1.Характеристика факт.Значение from ( select характеристика.признак, факт.объект from характеристика, факт) as t1 left join факт on факт.объект=t1.объект and факт.Характеристика=t1.Характеристика |
21 авг 18, 13:31 [21649435] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
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] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
чутка не так 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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
может человеку надо про ключи пояснить ?? Бо так и будет всю жизнь лефто кросс джойнить![]() |
21 авг 18, 13:38 [21649461] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
Посетитель, да, сразу написал SUM потом решил, а зачем :) |
21 авг 18, 13:41 [21649471] Ответить | Цитировать Сообщить модератору |
Посетитель Member Откуда: Сообщений: 1210 |
какие такие ключи? отродясь монтировкой пользовался, ни разу не подвела. ![]() |
||
21 авг 18, 13:44 [21649478] Ответить | Цитировать Сообщить модератору |
jango77 Member Откуда: Сообщений: 41 |
TaPaK, Посетитель, спасибо за помощь! :) |
21 авг 18, 14:02 [21649519] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |