SukirtiShetty Ответов: 2

Как транспонировать данные colum в строки в SQL server 2008


Привет
Я написал следующий запрос, чтобы получить общее количество конкретных пользователей для создания производственного отчета

Мой SQL-запрос:

Выберите distinct (resources), work_area, scope,
ДЕЛО
WHEN (scope = 'DataEntry' и work_area= 'Coding') Затем image_count
WHEN (scope = 'DataEntry' и work_area= 'QC') THEN image_count/4
WHEN (scope= 'Technical') THEN sum (convert(int, [duration]*6.25))
ЕЩЕ ''
Конец "Итого"
С работы, где функция datepart(мм,dat_e)='07' и datepart(год,dat_e)='2016' группа ресурсов, объем, image_count, продолжительность, work_area;


и я получаю результаты, как показано ниже:


resources	work_area	scope	  Total
John	     Other	   Technical	65
John	     QA	       Technical	150
Mary	     Other	   Technical    40
Rita	     Coding	   DataEntry	800
Rita	     Coding	   DataEntry	900
Rita	     Coding	   DataEntry	950
Rita	     Coding	   DataEntry	700
Rita	     QC	       DataEntry	800
Rita	     Coding	   DataEntry	850
Rita	     QC	       DataEntry	700
sharo	     Coding	   DataEntry	900
sharo	     Other	   Technical    200
sharo	     Coding	   DataEntry	800



и я хочу получить результат, как показано ниже

resources Technical DataEntry Total
John	   215		           215
Mary	   40		           40
Rita	               5700	   5700
Sharo	   200	       1700	   1900


Кто-нибудь может, пожалуйста, помогите мне решить эту проблему

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

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

0x01AA

Вы просите чего-то большего, чем просто транспонировать. Взгляните на эту статью CP: SQL-Pivot с общим итогом столбца и строки[^].
Вероятно, вы также найдете решения без необходимости использования хранимой процедуры.

Kornfeld Eliyahu Peter

Проверьте это тоже: https://msdn.microsoft.com/en-us/library/ms177410.aspx

2 Ответов

Рейтинг:
19

an0ther1

Вариант 1: Используйте Pivot, как предложил 0x01AA.
Вариант 2: Используйте объединения против одной и той же таблицы, чтобы разрезать данные так, как вы хотите.
Основываясь на том, что вы предоставили, нижеприведенное должно работать.

SELECT 
    a.Resources,
    COALESCE(SUM(CONVERT(INT, d.duration*6.25)), 0) AS Technical,
    COALESCE(SUM(b.image_count), 0) + (COALESCE(SUM(c.image_Count), 0)/4) AS DataEntry,
    COALESCE(SUM(CONVERT(INT, d.duration*6.25)), 0) + COALESCE(SUM(b.image_count), 0) +
    (COALESCE(SUM(c.image_Count), 0)/4) AS Total
FROM 
    work a
    LEFT JOIN work d ON a.resources = d.resources AND d.scope = 'Technical' AND YEAR(d.dat_e) = '2016' AND MONTH(d.dat_e) = '7'
    LEFT JOIN work b ON a.resources = b.resources AND b.scope = 'DataEntry' AND b.work_area = 'Coding' AND YEAR(b.dat_e) = '2016' AND MONTH(b.dat_e) = '7'
    LEFT JOIN work c ON a.resources = c.resources AND c.scope = 'Technical' AND c._work_area = 'QC' AND YEAR(c.dat_e) = '2016' AND MONTH(c.dat_e) = '7'
GROUP BY
    a.Resources

с уважением


SukirtiShetty

Привет спасибо за предоставленный ответ
Запрос работал для меня, кроме общей суммы

Если какое-либо значение является значение null тогда сумма также показывает 'нуль' не clculating других ценностей из разных областей

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


ресурсы технические данные всего
Джон 215 NULL NULL
Мэри 40 ноль ноль
Rita NULL 5700 NULL
Шаро 200 1700 1900

an0ther1

Попробуйте обновленное решение - оно должно быть немного более надежным

с уважением

SukirtiShetty

Огромное спасибо!. Для меня это прекрасно работало...

Рейтинг:
0

Daniel Jones

Взгляните на эту ссылку надеюсь это вам поможет:
sql server-простой способ транспонирования столбцов и строк в Sql? - переполнение стека[^]