Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL使用一个表中的行数据从另一个表中的特定列中选择数据_Sql_Sql Server_Calculated Columns - Fatal编程技术网

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)