ORDER BY с ОБЪЕДИНЕНИЕМ разрозненных наборов данных (T-SQL)

Вы можете использовать компилятор C ++, такой как gcc, для компиляции вашего кода на C. Вот хорошая статья со ссылками на бесплатные компиляторы C / IDE:

http://computerprogramming.suite101.com/article.cfm/freeprogrammingtools

15
задан ashleedawg 5 August 2018 в 05:14
поделиться

4 ответа

Select ID, Cat, Price, Name, Abbrv
From
(SELECT t1.ID, t1.Cat, t1.Price, t1.Price AS SortPrice, NULL as Name, NULL as Abbrv 
FROM t1
UNION
SELECT t2.ID, NULL as Cat, NULL as Price, t1.Price as SortPrice, t2.Name, t2.Abbrv 
   FROM t2
   inner join t1 on t2.id = t1.id
) t3
ORDER BY SortPrice DESC, Abbrv ASC

Somehow you have to know the data in table 2 are linked to table 1 and share the price. Since the Null in abbrv will come first, there is no need to create a SortAbbrv column.

28
ответ дан 1 December 2019 в 01:31
поделиться

Быстрое решение - сделать 2 вставки во временную таблицу или таблицу переменную, и как часть вставки во временную таблицу вы можете установить столбец флагов, чтобы облегчить сортировку, а затем упорядочить по этому столбцу флагов.

1
ответ дан 1 December 2019 в 01:31
поделиться

В верхней части моей головы я бы сказал, что в худшем случае вы создаете временную таблицу со всеми полями, выполняете INSERT INTO временную таблицу из T1 и T2, а затем SELECT из temp таблица с заказом по.

т.е. Создайте временную таблицу (например, #temp) с полями Id, Cat, Price, Name, Abbrv, а затем:

SELECT Id, Cat, Price, null, null INTO #temp FROM T1
SELECT Id, null, null, Name, Abbrv INTO #temp FROM T2
SELECT * FROM #temp ORDER BY Id, Price DESC, Abbrv ASC

NB: я не на 100% уверен в синтаксисе null из вставок, но думаю, что это сработает .

РЕДАКТИРОВАТЬ: Добавлен заказ по цене и сокращению после идентификатора ... если идентификатор не связывает T1 и T2, что делает?

1
ответ дан 1 December 2019 в 01:31
поделиться

Вы должны использовать UNION ALL вместо UNION, чтобы сэкономить на проверке дубликатов.

SELECT *
FROM
(
SELECT t1.ID, t1.Cat, t1.Price, NULL as Name, NULL as Abbrv FROM t1
UNION ALL
SELECT t2.ID, NULL as Cat, NULL as Price, t2.Name, t2.Abbrv FROM t2
) as sub
ORDER BY
  ID,
  CASE WHEN Price is not null THEN 1 ELSE 2 END,
  Price DESC,
  CASE WHEN Abbrv is not null THEN 1 ELSE 2 END,
  Abbrv ASC
5
ответ дан 1 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: