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

Откуда: Astana
Сообщений: 64
Добрый день! Есть 2 таблица в SQL SERVERе. Я их объединил(UNION ALL). Теперь как получить как на картинке(Результат)

К сообщению приложен файл. Размер - 96Kb
3 апр 18, 06:46    [21306793]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
SMART_001,

(Select t1,summa1,0 as summa2,y1 from table_1)
Union all 
(Select t2,0 as summa1,summa2,y2 from table_2)
3 апр 18, 06:54    [21306798]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
SMART_001
Member

Откуда: Astana
Сообщений: 64
Kopelly,

Спасибо!
3 апр 18, 07:00    [21306801]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
982183
Member

Откуда: VL
Сообщений: 3352
Select TV1 AS TV, summa1, 0 as summa2, y1 AS Y from table_1
Union all 
Select TV2 AS TV, 0 as summa1, summa2, y2 AS Y from table_2


Но работать будет только, если тип " 0 as summa2" будет тем же, что и "summa1"
3 апр 18, 07:01    [21306803]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
SMART_001
Member

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

Спасибо, получается,


Select ab4.TV as TV, ab4.SM as SM, ab4.Y as Y

FROM

(Select TV1 AS TV, SUM(summa1) as SM1, 0 as SM2, y1 AS Y from table_1
Union all
Select TV2 AS TV, 0 as SM1, SUM(summa2) as SM2, y2 AS Y from table_2) ab4
3 апр 18, 07:14    [21306811]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
982183
Member

Откуда: VL
Сообщений: 3352
В крайнем случае если будут не целые числа
summa1, 0*summa1 as summa2
0*summa2 as summa1, summa2
3 апр 18, 07:18    [21306813]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
SMART_001
Member

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

Почему 0 надо умножать


Select ab4.TV as TV, ab4.SM1 as SM1,ab4.SM2 as SM2, ab4.Y as Y

FROM

(Select TV1 AS TV, SUM(summa1) as SM1, 0*summa1 as SM2, y1 AS Y from table_1
Union all
Select TV2 AS TV, 0*summa2 as SM1, SUM(summa2) as SM2, y2 AS Y from table_2) ab4

group by ab4.TV

order by 1 asc
3 апр 18, 07:26    [21306821]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
982183
Member

Откуда: VL
Сообщений: 3352
0 as - тип получится скорее всего INT
0*summa1/2 as - тип получится скорее всего тот же, что и у summa1/2

Если summa1/2 с типом FLOAT, то UNION ALL может и не сработать
3 апр 18, 07:32    [21306827]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
982183
тип получится скорее всего
982183
тип получится скорее всего тот же
А прочитать не судьба?
Приоритет типов данных (Transact-SQL)
3 апр 18, 10:45    [21307355]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap,
ну и сразу же и
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/operator-precedence-transact-sql
3 апр 18, 10:47    [21307363]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
SMART_001
Member

Откуда: Astana
Сообщений: 64
Спасибо! теперь сортировать по MAX(ab4.SM2) и вывести TOP 3

Select TOP 3 ab4.TV as TV, ab4.SM1 as SM1,ab4.SM2 as SM2, ab4.Y as Y

FROM

(Select TV1 AS TV, SUM(summa1) as SM1, 0 as SM2, y1 AS Y from table_1
Union all
Select TV2 AS TV, 0 as SM1, SUM(summa2) as SM2, y2 AS Y from table_2) ab4
where MAX(ab4.SM1)
group by ab4.TV

order by 1 asc

К сообщению приложен файл. Размер - 93Kb
5 апр 18, 12:45    [21314781]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
SMART_001,

1. Группировка производится после отсева по Where. Проверять соответствие MAX(ab4.SM1) можно в Having, например MAX(ab4.SM1) > 1000. Но это не твой случай (тебя интересуют не конкретные значения)

2. В твоем случае нужно выбрать первые три записи (Top 3) из отсортированной по ab4.SM2 таблицы (Order by ab4.SM2 Desc)
5 апр 18, 14:14    [21315305]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться в SQL  [new]
SMART_001
Member

Откуда: Astana
Сообщений: 64
Kopelly,
СПАСИБО
6 апр 18, 09:21    [21317462]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить