Сводные таблицы без SUM / Count или лучшего метода - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть следующие две таблицы:

Таблица сотрудников

id name
1  John Doe

Таблица продуктов

id category  units
1  Chairs    5
1  Computers 2
1  Pens      40

Когда я запускаю следующие

Select name, category, units FROM employee 
JOIN Products 
ON products.id = employee.id 

Я получаю три строки данных:

name        category    units
john doe    chairs      5
john doe    computers   2
john doe    pens        40

Я хочу, чтобы мой вывод выглядел следующим образом:

name        chairs  computers   pens
john doe    5       2           40

Я пробовал сводную таблицу, но для этого требуется, чтобы у меня было поле суммы / количествано я не хочу суммировать какие-либо данные.Есть ли хитрость или лучший способ, чем Pivot, чтобы получить результат выше?

1 Ответ

0 голосов
/ 27 сентября 2019

Этого можно достичь, используя динамические запросы.

  1. Получите ваши отдельные категории для создания столбцов
  2. Создайте строку sql с динамическими столбцами
  3. Поворачивайте столбцы.
declare  @cols nvarchar(max);
declare  @sql nvarchar(1000);
//generate category columns
select @cols =
    STUFF((select N'],[' + category
       from (select distinct category
          from Products) AS t1   
       FOR XML PATH('')
    ), 1, 2, '') + N']';

set @sql = N'Select name, units, ' + @cols + N'  FROM employee 
                JOIN Products 
                ON products.id = employee.id  ) t1
            pivot 
            (
                max(t1.category)
                for t1.category in (' + @cols + N')
            ) p '

exec sp_executesql @sql;
...