Сводная таблица без нуля - PullRequest
       6

Сводная таблица без нуля

0 голосов
/ 11 января 2020

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

+-----+-------+------+---------+
| ID  | NAME  | SORT |  AMOUNT |
+-----+-------+------+---------+
|   1 | sak   | A    |     200 |
|   2 | mods  | b    |     200 |
|   3 | wef   | c    |     200 |
|   4 | sak   | b    |     300 |
|   5 | mods  | a    |     210 |
+-----+-------+------+---------+

, и я пишу следующий код:


SELECT ID,A, B, C 
FROM 
(
Select ID,SORT,
 'SORT'+
      cast(row_number() over(partition by ID order by ID)
             as varchar(10)) Col
from TABLE
) Temp 
pivot 
(
max (SORT)
for Col in ( A, B, C  )
)piv

Я получил такой результат:

+----+------+------+------+
| ID |  A   |  B   |  C   |
+----+------+------+------+
|  1 | NULL | NULL | NULL |
|  2 | NULL | NULL | NULL |
|  3 | NULL | NULL | NULL |
|  4 | NULL | NULL | NULL |
|  5 | NULL | NULL | NULL |
+----+------+------+------+

Но нужно показать таблицу таким образом, но я получаю NULL вместо суммы.

Ответы [ 2 ]

2 голосов
/ 11 января 2020

Я понимаю, что вам нужна одна запись на sak, с amount для a, b и c в столбцах.

Вот решение для нескольких баз данных, которое сводится набор данных по списку столбцов fixed с условным агрегированием:

select 
    sak,
    max(case when upper(sort) = 'A' then amount end) a,
    max(case when upper(sort) = 'B' then amount end) b,
    max(case when upper(sort) = 'C' then amount end) c
from mytable
group by sak
order by sak
0 голосов
/ 11 января 2020

Вы также можете попробовать следующее:

  1. Согласно вашей структуре
SELECT ID, A, B, C
FROM
(
Select ID,UPPER(SORT) SORT,AMOUNT
from MYTABLE
) Temp
pivot
(
max (AMOUNT)
for SORT in (A, B, C)
)piv
ORDER BY 1
Ожидается
SELECT NAME, A, B, C
FROM
(
SELECT NAME, SORT, AMOUNT
FROM MYTABLE
)T
PIVOT
(
SUM(AMOUNT) FOR SORT IN (A, B, C)
)PVT
...