#sql #sql-server #stored-procedures
#sql #sql-сервер #хранимые процедуры
Вопрос:
У меня есть хранимая процедура, возвращающая таблицу, которая выглядит следующим образом:
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'
но вместо этого возвращать строку «Фрахт» в виде столбца только со значением «Цена»?
Из того, что я видел, кажется, что мне может потребоваться использовать оператор PIVOT для достижения этой цели, но это кажется слишком сложным. Есть ли способ, которым я мог бы достичь этого результата, используя выражение CASE или IF?
Ответ №1:
На основе предоставленных вами данных имеется одна строка со значением описания: «Перевозка». Предполагая, что это так, попробуйте:
select ID,Type,Price,Description,
FreightPrice = (select Price
from mytable
where Description = 'Freight')
from mytable
where Description <> 'Freight'
Комментарии:
1. Да, мы получили то же самое 🙂 Я не знал, что вы могли бы сделать
FreightPrice = ...
в SQL Server. В любом случае 12. @TheImpaler существует несколько способов записи псевдонимов в sql server. Аарон Бертран отлично справляется с их рассмотрением здесь .
3. Это сделало свое дело, я, по-видимому, переусердствовал. Спасибо Eray и Impaler. Я приму этот ответ, поскольку он был первым.
4. @SeanLange Хорошая статья.
Ответ №2:
Если Freight
строка всегда перемещается вправо, вы можете жестко запрограммировать эту логику (предполагая, что это всегда одна строка), как в:
select
id,
type,
price,
description,
(select price from t where description = 'Freight') as freightprice
from t
where description <> 'Freight'
Примечание: этот запрос завершится сбоем, если в вашей таблице будет более одной строки для Freight
.
Комментарии:
1. Спасибо за проверку моего ответа 🙂