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

Динамический поворот SQL для целей

Предположим, у меня есть таблица со следующими строками и столбцами

EmpCode    Empname   Goals
-------    ----     ------
101        kiran     readsql
101        kiran     coding
101        kiran     readcss
102        rohit     coding
102        rohit     readjava
103        pradi     do nothing

Я хочу отобразить приведенную выше таблицу в следующем формате:

EmpCode    Empname   Goal1     Goal2    Goal3
-------    ----     ------     ------   ------ 
101        kiran     readsql   coding   readcss
101        rohit     coding    readjava
103        pradi     do nothing

Полевые цели динамичны, пожалуйста, помогите мне. Спасибо.


  • Взгляните на пример здесь . Я думаю, у вас могут быть проблемы, если количество голов не имеет максимума. 11.02.2016
  • привет, кости, в приведенном выше примере он использует количество недель для группировки, но в моем случае введенная цель - varchar 11.02.2016
  • Он не будет отвечать конкретно на ваш вопрос, но пока кто-то другой не вмешается, вы, вероятно, сможете адаптировать его к тому, что делаете, и найти свой собственный ответ. Это лучше, чем ждать, нажав кнопку «Обновить». :о) 11.02.2016
  • Мне интересно, почему EmpCode во второй строке ожидаемого результата равен 101, а не 102. 11.02.2016
  • Извините, это опечатка 12.02.2016
  • @bones .. Спасибо за ваши комментарии .. :-) Я новичок в этой концепции, поэтому не могу сопоставить свое требование с существующим примером, который вы упомянули 12.02.2016

Ответы:


1
CREATE TABLE #tt(id INT IDENTITY(1,1) PRIMARY KEY,EmpCode INT,Empname VARCHAR(2566),Goals VARCHAR(256));
INSERT INTO #tt(EmpCode,Empname,Goals)VALUES
    (101,'kiran','readsql'),
    (101,'kiran','coding'),
    (101,'kiran','readcss'),
    (102,'rohit','coding'),
    (102,'rohit','readjava'),
    (103,'pradi','do nothing');

DECLARE @goal_cols NVARCHAR(MAX)=STUFF((
    SELECT DISTINCT N',Goal'+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3))
    FROM #tt
    FOR XML PATH('')
    ),1,1,''
);

DECLARE @stmt NVARCHAR(MAX)=N'
    SELECT *    
    FROM (
            SELECT 
                EmpCode,Empname,Goals,
                goal_id=''Goal''+CAST(ROW_NUMBER()OVER(PARTITION BY empcode ORDER BY id) AS VARCHAR(3))
            FROM 
                #tt
        ) AS s
        PIVOT(MAX(Goals) FOR goal_id IN ('+@goal_cols+')) AS p
    ORDER BY EmpCode;';

EXECUTE sp_executesql @stmt;

DROP TABLE #tt;

Результат:

+---------+---------+------------+----------+---------+
| EmpCode | Empname |   Goal1    |  Goal2   |  Goal3  |
+---------+---------+------------+----------+---------+
|     101 | kiran   | readsql    | coding   | readcss |
|     102 | rohit   | coding     | readjava | NULL    |
|     103 | pradi   | do nothing | NULL     | NULL    |
+---------+---------+------------+----------+---------+
11.02.2016
  • круто... спасибо ТТ :-) 12.02.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге 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 , и использованием..

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