Сделать горизонтальное представление таблицы в SQL-запросе - PullRequest
0 голосов
/ 27 марта 2019

У меня есть таблица предметов с ценой за местоположение.

Select Item, Price, location from ItemTable Order by Item, Location

Вот набор результатов

ITEM    Price   Location
1       10      North
1       20      South
2       10      North
2       20      South
3       20      North
3       20      South

Я хочу сделать презентацию окончательного набора результатов по горизонтали, сгруппированную по Item.Ожидаемый результат будет примерно таким:

Item    North   South
1       10      20
2       10      20
3       20      20

Но я уже полностью потерян.

Я использую SQL Server 2014

Ответы [ 3 ]

2 голосов
/ 27 марта 2019

Вы можете написать свой запрос следующим образом, используя условный агрегат.

SELECT item, 
       Sum(CASE 
             WHEN location = 'North' THEN price 
             ELSE 0 
           END) AS North, 
       Sum(CASE 
             WHEN location = 'South' THEN price 
             ELSE 0 
           END) AS South 
FROM   ItemTable  
GROUP  BY item 

Если хотите, вы также можете использовать PIVOT как показано ниже.

SELECT Item, Price, location 
FROM   ItemTable  
       PIVOT(Sum(price) 
            FOR location IN([North], 
                            [South])) pvt 

Онлайн демо

1 голос
/ 27 марта 2019

SQL Server Pivot можно использовать для достижения этой цели. Используйте запрос ниже:

С помощью Pivot вы можете объединять свои результаты и преобразовывать строки в столбцы

Таблица образцов и данные испытаний

declare @ItemTable  table
(ITEM int, Price int, Location varchar(20))

insert into @ItemTable
(ITEM,    Price,   Location)
values
(1   ,    10  ,    'North'),
(1  ,     20   ,   'South'),
(2  ,     10   ,   'North'),
(2  ,     20   ,  'South'),
(3  ,     20  ,    'North'),
(3  ,     20  ,    'South')

Запрос

SELECT ITEM, North,South
FROM   @ItemTable 
 PIVOT  
(SUM(Price) FOR Location IN (North,South))tab  
ORDER BY ITEM 
0 голосов
/ 27 марта 2019

Структура вашей таблицы неверна.Вы должны переделать таблицу или изменить названия столбцов на ITEM, NORTH, SOUTH.В настоящее время столбцами вашей таблицы являются ITEM, PRICE, LOCATION, поэтому очевидно, что они будут отображаться так, что вы можете использовать кодирование внешнего интерфейса, чтобы оно выглядело так, как вам нужно, но структура все равно будет неправильной.

...