Arhn - архитектура программирования

SQL PIVOT с типом данных varchar, возвращающим значение null

Я пытаюсь повернуть данные в таблице sql, чтобы получить только одну строку для каждого идентификатора записи. Однако код, который я запускаю, продолжает возвращать нулевые значения в качестве моих конечных результатов.

Таблица у меня выглядит так:

"Sequence"  "University Issuing Body"**    
"1" "College1"    
"1" "College2"
"2" "College1"    
"2" "College1"    
"2" "College2"

Мне нужно, чтобы таблица выглядела следующим образом:

"Sequence"  "University Issuing Body1"  "University Issuing Body2"  "University Issuing Body3"    
"1" "College1"  "College2"  "NULL"
"2" "College1"  "College1"  "College2"

Код, который я запускаю, выглядит следующим образом:

select
     Sequence]
    ,[University Issuing Body_1]
    ,[University Issuing Body_2]
    ,[University Issuing Body_3]

from (
    select
         [Sequence]
        ,[University Issuing Body]
        ,'University Issuing Body' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
    from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
    ) d
    pivot(
        max([University Issuing Body])
        for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
        )pvt

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

"Sequence"  "University Issuing Body_1" "University Issuing Body_2" "University Issuing Body_3"

"1" "NULL"  "NULL"  "NULL"

"2" "NULL"  "NULL"  "NULL"

Любая помощь будет очень признательна, так как я искал решение в Интернете и не могу найти, где я ошибаюсь.

Заранее спасибо.

04.07.2018

Ответы:


1

Вы строите промежуточную таблицу с hdg в формате University Issuing Body<n>. Но затем вы вытаскиваете значения, где hdg имеет формат University Issuing Body_<n>. Неудивительно, что это ничему не соответствует, поэтому вы получаете NULL.

Просто поставьте подчеркивание в конструкции hdg:

select
 [Sequence]
,[University Issuing Body_1]
,[University Issuing Body_2]
,[University Issuing Body_3]
from (
    select
        [Sequence]
        ,[University Issuing Body]
        ,'University Issuing Body_' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
    from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
    ) d
    pivot(
        max([University Issuing Body])
        for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
        ) pvt
04.07.2018
  • Большое спасибо! Не могу поверить, какую глупую ошибку я совершал. Ценю ваш ответ :) 04.07.2018

  • 2

    Просто используйте условную агрегацию:

    select Sequence,
           max(case when seqnum = 1 then [University Issuing Body] end) as University_Issuing_Body_1,
           max(case when seqnum = 2 then [University Issuing Body] end) as University_Issuing_Body_2,
           max(case when seqnum = 3 then [University Issuing Body] end) as University_Issuing_Body_3
    from (select pqj.*
                 row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
          from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined] pqj
         ) d
    group by [University Issuing Body];
    

    Если вы действительно хотите использовать pivot, нет причин определять hdg:

    select [Sequence],
           [1] as [University Issuing Body_1], 
           [2] as [University Issuing Body_2], 
           [3] as [University Issuing Body_3]
    from (select [Sequence], [University Issuing ,Body]
                 row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
          from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
         ) d
    pivot (max([University Issuing Body])
           for seqnum in (1, 2, 3)
          )pvt
    
    04.07.2018
  • Благодарю вас! Это было действительно полезно. 04.07.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..