Форматирование вывода SQL-запросов: заголовок столбца с последующим значением [дубликат]

Давайте посмотрим на лес сначала, прежде чем смотреть на деревья.

Здесь есть много информативных ответов с большими подробностями, я не буду повторять ни одного из них. Ключ к программированию в JavaScript имеет сначала правильную ментальную модель общего исполнения.

  1. Ваша точка входа (ов) выполняется в результате события. Например, в браузер загружается тег сценария с кодом. (Соответственно, поэтому вам, возможно, придется заботиться о готовности страницы запускать ваш код, если он требует, чтобы элементы dom были сконструированы первыми и т. Д.)
  2. Ваш код выполняется до завершения, однако многие асинхронные вызовы, которые он делает, без выполнения каких-либо ваших обратных вызовов, включая запросы XHR, установку тайм-аутов, обработчиков событий dom и т. д. Каждый из этих обратных вызовов, ожидающих выполнения, будет находиться в очереди, ожидая, что их очередь будет запущена после других событий
  3. Каждый отдельный обратный вызов XHR-запроса, установленного таймаута или dom события после вызова будет завершен.

Хорошие новости заключается в том, что, если вы хорошо понимаете этот момент, вам никогда не придется беспокоиться о гоночных условиях. Прежде всего вы должны понимать, как вы хотите упорядочить свой код как по существу ответ на разные дискретные события, и как вы хотите объединить их в логическую последовательность. Вы можете использовать обещания или новые асинхронные / ожидающие более высокие уровни в качестве инструментов для этой цели, или вы можете откатывать свои собственные.

Но вы не должны использовать какие-либо тактические инструменты для решения проблемы, пока вам не понравится актуальная проблемная область. Нарисуйте карту этих зависимостей, чтобы знать, что нужно запускать, когда. Попытка ad-hoc подхода ко всем этим обратным вызовам просто не поможет вам.

90
задан Blorgbeard 5 May 2014 в 04:18
поделиться

2 ответа

Ваш запрос очень близок. Вы должны использовать следующее, которое включает в себя subject в конечном списке выбора:

select u.name, u.subject, u.marks
from student s
unpivot
(
  marks
  for subject in (Maths, Science, English)
) u;

См. SQL Fiddle с демонстрацией

151
ответ дан dasblinkenlight 26 August 2018 в 06:55
поделиться

Вы также можете попробовать стандартный метод sql un-pivoting, используя последовательность логики со следующим кодом. Следующий код имеет 3 шага:

  1. создает несколько копий для каждой строки с использованием cross join (также создавая поле темы в этом случае)
  2. создает столбец «метки» и заполняет соответствующие значения с помощью выражения case (например: если субъектом является наука, тогда выберите значение из научного столбца)
  3. удалять любые нулевые комбинации (если существует, выражение таблицы можно полностью избежать, если в базовой таблице строго нет нулевых значений)
     select *
     from 
     (
        select name, subject,
        case subject
        when 'Maths' then maths
        when 'Science' then science
        when 'English' then english
        end as Marks
    from studentmarks
    Cross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject)
    )as D
    where marks is not null;
    
3
ответ дан Rahul Kohli 26 August 2018 в 06:55
поделиться
Другие вопросы по тегам:

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