Моя таблица имеет записи ниже, и мне нужно, чтобы результаты были ниже, чем данные.
date code lc_code qty
7/1/2018 MC20651 1126 322.00
7/1/2018 MC10102 3356 30.00
7/1/2018 MC10201 4422 56.00
7/1/2018 MC10303 5065 55.00
7/1/2018 MC20902 7012 65.00
7/1/2018 MC50201 1258 45.00
7/1/2018 MC10201 1126 86.00
7/1/2018 MC50201 7012 14.25
7/1/2018 MC20651 1258 322.00
7/1/2018 MC20651 3356 78.00
Ниже приведено то, что мне нужно установить для datatable. Можете ли вы предоставить лучший запрос для этого?
| Code | 1126 | 3356 | 4422 | 5065 | 7012 | 1258 |
--------------------------------------------------------------------
| MC20651 | 322.00| 78.00| 0.00 | 0.00 | 0.00 | 322.00 |
--------------------------------------------------------------------
| MC10102 | 0.00 | 30.00 | 0.00 | 0.00 | 0.00 | 0.00 |
--------------------------------------------------------------------
| MC10201 | 86.00| 0.00 | 56.00 | 0.00 | 0.00 | 134.25 |
--------------------------------------------------------------------
| MC10303 | 0.00 | 0.00 | 0.00 | 55.00 | 0.00 | 0.00 |
--------------------------------------------------------------------
| MC20902 | 0.00 | 0.00 | 0.00 | 960.00 | 65.00 | 0.00 |
--------------------------------------------------------------------
| MC50201 | 0.00 | 0.00 | 0.00 | 0.00 | 14.25 | 45.00|
--------------------------------------------------------------------
Это может быть достигнуто с помощью функций max(case when... end)
и группировки по code
, это обычный способ поворота данных в T-SQL:
Пример данных:
create table tbl(date date, code char(10), lc_code int, qty float);
insert into tbl (code,lc_code,qty) values
('MC20651', 1126, 322.00),
('MC10102', 3356, 30.00),
('MC10201', 4422, 56.00),
('MC10303', 5065, 55.00),
('MC20902', 7012, 65.00),
('MC50201', 1258, 45.00),
('MC10201', 1126, 86.00),
('MC50201', 7012, 14.25),
('MC20651', 1258 , 322.00),
('MC20651', 3356, 78.00);
T-SQL:
select 'code'
'1126',
'3356',
'4422',
'5065',
'7012',
'1258',
'1126' + '3356' + '4422' + '5065' + '7012' + '1258' 'sum'
from (
select 'code',
max(case lc_code when 1126 then qty else 0 end) '1126',
max(case lc_code when 3356 then qty else 0 end) '3356',
max(case lc_code when 4422 then qty else 0 end) '4422',
max(case lc_code when 5065 then qty else 0 end) '5065',
max(case lc_code when 7012 then qty else 0 end) '7012',
max(case lc_code when 1258 then qty else 0 end) '1258'
from tbl
group by 'code'
) 'a';