SQL 使用一个 table 中的行数据从另一个 table 中的特定列中选择数据
SQL Using row data from one table to choose data from a specific column in a different table
我有一个 table 的行数据与另一个 table 中的列名相匹配:
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
Tax Bracket:
Type Low Mid High
Toy .05 .07 .1
Game .06 .09 .11
我想在项目 table 中添加一列,其中 Total_Price 是基于项目类型和项目等级的 priceX(1+tax) 以将其作为最终 table
ProdName .... Price Total_Price
Teddy Bear 5 5.25
Airplane 20 22
Monopoly 15 16.35
Chess 20 22.2
我该怎么做?
更新
我犯了一个错误,后者 table 是折扣而不是税,不管怎样这是我的代码,但我在 SELECT 子句上遇到语法错误:
创建函数dbo.Net_Price_Calc(@quality nvarchar(50), @type nvarchar(50), @Price DECIMAL)
Returns 十进制
作为
Select 当@quality= 'Low' 那么 (1-t.low)*price 的情况
当@quality= 'Mid' 然后 (1-t.mid)*price
当@quality = 'High' 然后 (1-t.high)*price
结尾
从税 t
其中类型 = t.type
;
改变 table 项
添加 Net_Price 为 dbo.Net_Price_Calc(质量、类型、价格)
;
错误:消息 156,级别 15,状态 1,程序 Net_Price_Calc,第 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;
I want to add a column to the Items table with the Total_Price
这里你需要的是Computed Column。但是,您是从多个表中绘制的,因此需要定义一个函数。
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)
请注意,这只是粗略的,并不是最快的。
或者您的意思是您想要创建一个在末尾计算列的查询?
我有一个 table 的行数据与另一个 table 中的列名相匹配:
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
Tax Bracket:
Type Low Mid High
Toy .05 .07 .1
Game .06 .09 .11
我想在项目 table 中添加一列,其中 Total_Price 是基于项目类型和项目等级的 priceX(1+tax) 以将其作为最终 table
ProdName .... Price Total_Price
Teddy Bear 5 5.25
Airplane 20 22
Monopoly 15 16.35
Chess 20 22.2
我该怎么做?
更新
我犯了一个错误,后者 table 是折扣而不是税,不管怎样这是我的代码,但我在 SELECT 子句上遇到语法错误:
创建函数dbo.Net_Price_Calc(@quality nvarchar(50), @type nvarchar(50), @Price DECIMAL)
Returns 十进制
作为
Select 当@quality= 'Low' 那么 (1-t.low)*price 的情况
当@quality= 'Mid' 然后 (1-t.mid)*price
当@quality = 'High' 然后 (1-t.high)*price
结尾
从税 t
其中类型 = t.type
;
改变 table 项
添加 Net_Price 为 dbo.Net_Price_Calc(质量、类型、价格)
;
错误:消息 156,级别 15,状态 1,程序 Net_Price_Calc,第 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;
I want to add a column to the Items table with the Total_Price
这里你需要的是Computed Column。但是,您是从多个表中绘制的,因此需要定义一个函数。
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)
请注意,这只是粗略的,并不是最快的。
或者您的意思是您想要创建一个在末尾计算列的查询?