由于我之前写的问题非常模棱两可且愚蠢,我将在此主题中更加明确。这是上一篇文章:How can I create a new column to SQL while adding conditions?
基本上,这两个表是:
vw_RecipeIngredientCheck (https://i.stack.imgur.com/jlArc.png)
SELECT TOP (1000) [RecipeName]
,[RecipeIngredientName]
,[Unit]
,[Amount]
,[DisplayOrder]
,[IngredientGroup]
,[VirtualProductName]
FROM [dbo].[vw_RecipeIngredientCheck]
虚拟产品(https://i.stack.imgur.com/xU8S7.png)
SELECT TOP (1000) [Id]
,[Name]
,[NativeUnitID]
,[Mapping]
,[Kg]
,[g]
,[l]
,[dl]
,[unit]
,[empty]
,[pack]
,[teaspoon]
,[spoon]
,[can]
,[bundle]
,[clove]
,[smidgen]
,[cube]
,[stick]
,[slice]
,[IsDurable]
,[letter]
,[Glass]
,[ProductImageId]
,[ResolvesToRealProduct]
FROM [dbo].[VirtualProduct]
我的目标是在vw_RecipeIngredientCheck表中创建一个新列,该列将Unit转换为标准单位(在VirtualProduct表中给出,称为 NativeUnitID )。
要注意,VirtualProduct表中的单元已经实现了转换逻辑。
因此,关键是要在vw_RecipeIngredientCheck中创建一个新列,并使用[VirtualProductName]将[Amount]与表VirtualProduct中以其[Unit]命名的列相乘。
示例:
[NewColumn] = [Amount] *(VirtualProduct中的列名称= [Unit])
基本上,在将两个表合并后,我得到了:
我不知道如何编写SQL查询,以使 Amount 乘以与其 Unit 匹配的列。例如,在上图中,索引为33的行具有以下内容: NativeUnitID:3(千克) 单位:克 数量:250
在 IngredientStd 列中,我希望将以克为单位的当前金额转换成其NativeUnitID,即Kg。基本上,数量应乘以“ g”列,这基本上是 Unit 列的内容。让我麻烦的是将[Unit]中的值与列名进行比较。
答案 0 :(得分:0)
您必须尝试使用动态表创建查询来实现此目的。
参考:Enum.GetName
答案 1 :(得分:0)
我将列出各种重量单位的表格更改为带有两个数据列的表格-单位名称和相对于最常见单位(例如1克)的重量系数。然后,恕我直言,您可以按单位名称轻松使用两个表联接,首先转换为标准单位,然后转换为您的本地单位。恕我直言,使用单位名称作为列名称来维护数据库逻辑没有太大价值。也许您真的需要它(或使用起来非常方便),那么我的建议不适用。