dinesh42 Ответов: 1

Как получить желаемый результат в SQL server


Привет

У меня есть сценарий, и я изо всех сил пытаюсь получить результат в нужном формате. У меня нет идей, как этого достичь!

У меня есть таблица сотрудников с именем и полом в качестве столбцов в ней. Примерные данные выглядят следующим образом:

Name   Gender
-------------
abc     M
xyz     M
mno     F
pqr     F
tuv     M


Я хочу, чтобы вывод был следующим:(каждая строка сопровождается противоположным полом)

Name    Gender
---------------
abc     M
mno     F
xyz     M
pqr     F
tuv     M


Что я уже пробовал:

я попытался использовать коррелированный подзапрос, но не смог добиться того, чего хотел.

PIEBALDconsult

Интересно, у меня есть идея...
Я скажу, что не могу гарантировать порядок, но М-М-М... порядок должен быть выполнимым.

1 Ответов

Рейтинг:
7

PIEBALDconsult

Это показывает, как ROW_NUMBER можно использовать для получения порядка M-F-M, но также (я думаю) демонстрирует, что строки также должны быть упорядочены по имени (потому что ROW_MUMBER требует порядка by).
И это также может плохо работать с другими наборами данных.

SELECT *
INTO #temp
FROM
(
  SELECT 'abc' [Name] , 'M' [Gender]
UNION ALL
  SELECT 'xyz' [Name] , 'M' [Gender]
UNION ALL
  SELECT 'mno' [Name] , 'F' [Gender]
UNION ALL
  SELECT 'pqr' [Name] , 'F' [Gender]
UNION ALL
  SELECT 'tuv' [Name] , 'M' [Gender]
) T

SELECT [Name]
, [Gender]
FROM
(
  SELECT * 
  , ROW_NUMBER() OVER ( PARTITION BY [Gender] ORDER BY [Name] )  [rn]
  FROM #temp
) T
ORDER BY [rn] , [Gender] DESC


Может быть, это даст некоторое представление.