SQL使用一个表中的行数据从另一个表中的特定列中选择数据
我有一个表,其中的行数据与另一个表中的列名相匹配,如下所示:SQL使用一个表中的行数据从另一个表中的特定列中选择数据,sql,sql-server,calculated-columns,Sql,Sql Server,Calculated Columns,我有一个表,其中的行数据与另一个表中的列名相匹配,如下所示: Items: ProdName ProdNum Quality Type Price Teddy Bear 123 Low Toy 5 Airplane 234 High Toy 20 Monopoly 345 Mid Game 15 Chess 456 High Game 20 我想在
Items:
ProdName ProdNum Quality Type Price
Teddy Bear 123 Low Toy 5
Airplane 234 High Toy 20
Monopoly 345 Mid Game 15
Chess 456 High Game 20
我想在Items表中添加一列,根据item的类型和item的层次,将Total_Price作为priceX(1+tax)作为最终表
ProdName .... Price Total_Price
Teddy Bear 5 5.25
Airplane 20 22
Monopoly 15 16.35
Chess 20 22.2
我该怎么做
更新
我犯了一个错误,后一个表是折扣而不是税,这是我的代码,但是我在SELECT子句上得到了一个语法错误:
创建函数dbo.Net\u Price\u Calc(@quality-nvarchar(50),@type-nvarchar(50),@Price-DECIMAL)
返回十进制
作为
当@quality='Low'时选择case,然后选择(1-t.Low)*价格
当@quality='Mid'时,则(1-t.Mid)*价格
当@质量='高'时,则(1吨高)*价格
结束
来自税务局
其中type=t.type
;
更改表项
将净价添加为dbo.Net\u Price\u Calc(质量、类型、价格)
;代码>
错误:Msg 156,15级,状态1,程序净价计算,第4行
关键字“Select”附近的语法不正确。使用join
和case
语句:
select i.*,
((case when Quality = 'Low' then t.low
when Quality = 'Mid' then t.mid
when Quality = 'High' then t.high
end) + 1) * Price as TotalPrice
from items i left join
taxes t
on i.type = t.type;
我想在Items表中添加一列,其中包含总价
你在这里需要的是一个。但是,您是从多个表中绘制的,因此需要定义一个函数
CREATE FUNCTION dbo.Total_Price_Calc(NVARCHAR(50) @Quality, NVARCHAR(50) @Type, DECIMAL @Price)
RETURNS DECIMAL
AS
SELECT
CASE WHEN @Type = 'Low'
//Etc, see Gordon Linoffs reply
FROM Tax
WHERE Type = @Type
然后是:
ALTER TABLE dbo.Items
ADD Total_Price AS dbo.Total_Price_Calc(QualityValue, TypeValue, PriceValue)
请注意,这只是粗略的,但不是最快的
或者,您的意思是希望创建一个查询,在查询结束时计算列?使用Case
语句为您的计算选择适当的列,更新为“我的最新代码”,错误为“您的@类型”,在这种情况下,应该是@Quality吗?是的,正确,抱歉。基本上,因为low/mid/high是需要case语句的列名。下面的Gordon Linoffs case语句可以使用,我只是没有复制它。当我尝试添加Alter Table行时,Alter上出现语法错误
CREATE FUNCTION dbo.Total_Price_Calc(NVARCHAR(50) @Quality, NVARCHAR(50) @Type, DECIMAL @Price)
RETURNS DECIMAL
AS
SELECT
CASE WHEN @Type = 'Low'
//Etc, see Gordon Linoffs reply
FROM Tax
WHERE Type = @Type
ALTER TABLE dbo.Items
ADD Total_Price AS dbo.Total_Price_Calc(QualityValue, TypeValue, PriceValue)