Удалить значения строк и преобразовать их в одно столбец - PullRequest
1 голос
/ 12 апреля 2019

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

ID | Type | Price | Description
-------------------------------
7  | J    | 50.00 | Job
7  | F    | 20.00 | Freight
7  | P    | 30.00 | Postage
7  | H    |  5.00 | Handling

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

ID | Type | Price | Description | FreightPrice
-----------------------------------------
7  | J    | 50.00 | Job         | 20.00
7  | P    | 30.00 | Postage     | 20.00
7  | H    |  5.00 | Handling    | 20.00

Есть ли способ, которымЯ могу использовать запрос, например:

SELECT * FROM Temp WHERE Type = 'F'

, но вместо этого возвращать строку 'Freight' в виде столбца, используя только значение 'Price'?

Из того, что я видел, выглядитМне может понадобиться вам оператор PIVOT для достижения этой цели, но это кажется слишком сложным.Есть ли способ, которым я мог бы достичь этого результата, используя выражение CASE или IF?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

На основании предоставленных вами данных, есть одна строка, имеющая значение описания: «Груз».Предполагая, что это так, попробуйте:

select ID,Type,Price,Description,
       FreightPrice = (select Price 
                       from mytable 
                       where Description = 'Freight')
from mytable
where Description <> 'Freight'
1 голос
/ 12 апреля 2019

Если строка Freight всегда перемещается вправо, вы можете жестко закодировать эту логику (при условии, что это всегда одна строка), например:

select
  id,
  type,
  price,
  description,
  (select price from t where description = 'Freight') as freightprice
from t
where description <> 'Freight'

Примечание: этот запрос завершится сбоем, если в вашей таблице более одной строки для Freight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...