Sql 在连接两个表时添加新列和用例

Sql 在连接两个表时添加新列和用例,sql,Sql,我要做的是在名为RecipeIngredientCheck的表中创建一个新列(其中包含以下列:[RecipeName]、[RecipeIngredientName]、[Unit]、[Amount]、[DisplayOrder]、[IngredientGroup]、[VirtualProductName]),必须根据以下条件填充该列。但是,我还需要在ReceiveRedientCheck.VirtualProductName上分别加入另一个名为vw_Recipe_All的表vw_Recipe_Al

我要做的是在名为
RecipeIngredientCheck
的表中创建一个新列(其中包含以下列:
[RecipeName]、[RecipeIngredientName]、[Unit]、[Amount]、[DisplayOrder]、[IngredientGroup]、[VirtualProductName]
),必须根据以下条件填充该列。但是,我还需要在ReceiveRedientCheck.VirtualProductName上分别加入另一个名为
vw_Recipe_All
的表vw_Recipe_All.Name,以便访问
[ReceiveRedientUnitId]、[g]、[teaspoon]
等列

vw\u Recipe\u所有列的列表:

[RecipeIsVerified],[IngredientGroup],[IngredientId],[IngredientDisplayName],[IngredientAmount] ,[IngredientUnit],[RecipeLine] ,[VirtualProductName] ,[Id] ,[IsVerified],[Name],[PricePerStandardUnit],[NativeUnitId] ,[Kg] ,[g],[l] ,[dl] ,[unit] ,[empty],[pack],[teaspoon],[spoon],[can] ,[bundle],[clove] ,[smidgen],[cube],[stick]  ,[slice]     ,[letter],[Glass] ,[RecipeIngredientUnitId]
下面的条件是专门针对表vw_Reciple_制定的,但正如我上面所述,我正在尝试在另一个表中创建一个新列

select RecipeId,RecipeName,Name,IngredientAmount,IngredientDisplayName,IngredientUnit,
CASE 
    WHEN RecipeIngredientUnitId=1 THEN g / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=2 THEN teaspoon / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=3 THEN spoon / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=4 THEN smidgen / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=6 THEN l / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=7 THEN dl / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=9 THEN unit / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=10 THEN bundle / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=11 THEN stick / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=12 THEN kg / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=13 THEN unit / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=14 THEN clove / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=15 THEN can / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=16 THEN slice / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=17 THEN [cube] / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=18 THEN glass / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=19 THEN pack / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    WHEN RecipeIngredientUnitId=20 THEN letter / (CASE WHEN NativeUnitId=1 THEN COALESCE(unit,1) WHEN NativeUnitId=2 THEN COALESCE(l,1) WHEN NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
    END as AmountInStandardUnit
from vw_Recipe_All
我曾经想过这样的事情,但是我得到了很多空值

UPDATE RecipeIngredientChecking
SET AmountInStandardUnit =
    CASE 
        WHEN RecipeIngredientUnitId=1 THEN g / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=2 THEN teaspoon / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=3 THEN spoon / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=4 THEN smidgen / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=6 THEN l / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=7 THEN dl / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=9 THEN vw_Recipe_All.unit / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=10 THEN bundle / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=11 THEN stick / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=12 THEN kg / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=13 THEN vw_Recipe_All.unit / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=14 THEN clove / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=15 THEN can / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=16 THEN slice / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=17 THEN [cube] / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=18 THEN glass / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=19 THEN pack / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        WHEN RecipeIngredientUnitId=20 THEN letter / (CASE WHEN vw_Recipe_All.NativeUnitId=1 THEN COALESCE(vw_Recipe_All.unit,1) WHEN vw_Recipe_All.NativeUnitId=2 THEN COALESCE(l,1) WHEN vw_Recipe_All.NativeUnitId=3 THEN COALESCE(kg,1) END) * IngredientAmount 
        END
from RecipeIngredientChecking Inner Join vw_Recipe_All ON RecipeIngredientChecking.VirtualProductName=vw_Recipe_All.Name 

有没有人对如何使其正常工作有更好的想法?目前,很多行在[AmountInstallStandardUnit]和[VirtualProductName]列中都有空值。

如果第一个查询正常,那么只需将其加入并
RecipeIngredientChecking
表即可

UPDATE rci
SET AmountInStandardUnit = va.AmountInStandardUnit
FROM RecipeIngredientChecking rci
JOIN 
(
 -- your first query here
) va ON rci.VirtualProductName = va.Name 

如果您的第一个查询工作正常,那么只需加入它并
RecipeIngredientChecking
表即可

UPDATE rci
SET AmountInStandardUnit = va.AmountInStandardUnit
FROM RecipeIngredientChecking rci
JOIN 
(
 -- your first query here
) va ON rci.VirtualProductName = va.Name 

帮助你变得容易,简化问题。(看一看)谢谢你的回复!我知道MRE,但是,我看不出我还应该添加什么来让它更清楚?它更多的是删除不需要重现问题的东西。让它更容易帮助您,简化问题。(看一看)谢谢你的回复!我知道MRE,但是,我看不出为了使它更清楚,我还应该添加什么?更多的是删除不需要重现问题的东西。