2014-02-05 3 views
1

Вопрос:Расчет столбца, когда ALIAS участвует

Написать ЗЕЬЕСТ, который возвращает эти имена столбцов и данные из продуктов таблицы:

ProductName - Колонка ProductName

ListPrice - The ListPrice column

DiscountPercent - Дисконтная колонна

DiscountAmount - колонна, которая вычисляется из предыдущих двух столбцов

DiscountPrice - столбец, который вычисленной из предыдущих трех колонок

Сортировка результирующего набора с помощью DiscountPrice в убывающей последовательности.

Я получил первый расчет, вычисляя скидку. Теперь, я должен вычислить DiscountPrice, вычитая ListPrice - DiscountPercent - DiscountAmount (который является псевдонимом).

Я не могу понять это. Мой код до сих пор ниже:

SELECT ProductName, 
     ListPrice, 
     DiscountPercent, 
     ListPrice - DiscountPercent AS DiscountAmount 
FROM Products; 
+0

Ответ на ваш вопрос может зависеть от используемого вами механизма базы данных. Пример: SQL Server, Oracle, MySQL и т. Д. –

+0

Вы не можете это сделать – zerkms

+0

Я использую SQL Server Management Studio, @GMastros. И спасибо, zerkms, это то, о чем я думал ... и в этом случае я не могу полностью ответить на вопрос. –

ответ

2

Существует несколько способов сделать это. Общее табличное выражение (метод КТР) Ex:

;With Data As 
(
    SELECT ProductName, 
      ListPrice, 
      DiscountPercent, 
      ListPrice - DiscountPercent AS DiscountAmount 
    FROM Products 
) 
Select ProductName, 
     ListPrice, 
     DiscountPercent, 
     DiscountAmount, 
     ListPrice-DiscountAmount As DiscountPrice 
From Data; 

Лично я не забочусь для этого метода, когда это что-то относительно просто, как это. Вместо этого я обычно повторяю вычисления, когда это необходимо. Например:

Select ProductName, 
     ListPrice, 
     DiscountPercent, 
     ListPrice - DiscountPercent As DiscountAmount, 
     ListPrice- (ListPrice - DiscountPercent) As DiscountPrice 
From Products; 

Кстати, я думаю, что ваш расчет для DiscountAmount ошибочен. Поскольку это опыт обучения, я предлагаю вам дважды проверить эту часть. Обратите внимание, что я не исправил эту часть кода, хотя я думаю, что это неправильно.

1

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

Во-первых, создать образец таблицы -

CREATE TABLE [dbo].[Products](
    [ProductName] [varchar](50) NULL, 
    [ListPrice] [decimal](18, 2) NULL, 
    [DiscountPercent] [decimal](18, 2) NULL 
) 

INSERT [dbo].[Products] ([ProductName], [ListPrice], [DiscountPercent]) VALUES (N'Bear', CAST(1100.00 AS Decimal(18, 2)), CAST(10.00 AS Decimal(18, 2))) 
INSERT [dbo].[Products] ([ProductName], [ListPrice], [DiscountPercent]) VALUES (N'Magazines', CAST(200.00 AS Decimal(18, 2)), CAST(13.50 AS Decimal(18, 2))) 
INSERT [dbo].[Products] ([ProductName], [ListPrice], [DiscountPercent]) VALUES (N'Mankini', CAST(25.00 AS Decimal(18, 2)), CAST(45.00 AS Decimal(18, 2))) 

В таблице вы получаете -

ProductName ListPrice DiscountPercent 
Bear 1100.00 10.00 
Magazines 200.00 13.50 
Mankini 25.00 45.00 

Затем запрос в соответствии с вашими потребностями -

SELECT * 
FROM 
(
SELECT 
[ProductName] 
,[ListPrice] 
,[DiscountPercent] 
,CAST(([ListPrice]*[DiscountPercent]/100) as Decimal(18,2)) AS DISCOUNT_AMOUNT 
,CAST(([ListPrice]*(1-[DiscountPercent]/100))as Decimal(18,2)) AS DISCOUNT_PRICE 
FROM [Products] 
) AS [STUFF] 
ORDER BY [STUFF].DISCOUNT_PRICE DESC 

Результаты по моему запросу -

ProductName ListPrice DiscountPercent DISCOUNT_AMOUNT DISCOUNT_PRICE 
Bear 1100.00 10.00 110.00 990.00 
Magazines 200.00 13.50 27.00 173.00 
Mankini 25.00 45.00 11.25 13.75 

Результаты с G Mastros запроса -

ProductName ListPrice DiscountPercent DiscountAmount DiscountPrice 
Bear 1100.00 10.00 1090.00 10.00 
Magazines 200.00 13.50 186.50 13.50 
Mankini 25.00 45.00 -20.00 45.00 
+1

Я разочарован тем, что вы исправили математику. Поскольку это назначение класса, я думал, что достаточно упомянуть, что математика может быть неправильной и что ее нужно дважды проверять. Кроме того, вы принимаете факты, не подтверждающие. @regular_kismet никогда не размещал структуры таблиц, поэтому вы не знаете, является ли DiscountPercent целым или десятичным. Если это целое число, для рассмотрения необходимо учитывать математические значения целого числа. –

+0

Поскольку это довольно буквально мое первое задание, я относительно уверен в том, что профессор хочет очень простой инструкции SELECT. –

2

Похоже G.Mastros забыл отсортировать результирующий набор по сниженной цене в убывающей последовательности.Таким образом, весь ваш запрос должен быть

SELECT ProductName, 
     ListPrice, 
     DiscountPercent, 
     ListPrice - DiscountPercent As DiscountAmount, 
     ListPrice - (ListPrice - DiscountPercent) As DiscountPrice 
FROM Products 
ORDER BY DiscountPrice DESC 
0

ВЫБРАТЬ ProductName, ListPrice, DiscountPercent,

ListPrice * DiscountPercent/100 AS DiscountAmount,

ListPrice * (1 - DiscountPercent/100) AS DiscountPrice

ОТ ПРОДУКТОВ

ПОРЯДОК РАСЦЕНКИ DESC

+0

Кодовые ответы не очень полезны. –

Смежные вопросы