根据另一个表中的条件创建新列

时间:2019-08-22 10:19:37

标签: mysql sql sql-server

由于我之前写的问题非常模棱两可且愚蠢,我将在此主题中更加明确。这是上一篇文章: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])

基本上,在将两个表合并后,我得到了:

Joined tables

我不知道如何编写SQL查询,以使 Amount 乘以与其 Unit 匹配的列。例如,在上图中,索引为33的行具有以下内容: NativeUnitID:3(千克) 单位:克 数量:250

IngredientStd 列中,我希望将以克为单位的当前金额转换成其NativeUnitID,即Kg。基本上,数量应乘以“ g”列,这基本上是 Unit 列的内容。让我麻烦的是将[Unit]中的值与列名进行比较。

2 个答案:

答案 0 :(得分:0)

您必须尝试使用​​动态表创建查询来实现此目的。 参考:Enum.GetName

答案 1 :(得分:0)

我将列出各种重量单位的表格更改为带有两个数据列的表格-单位名称和相对于最常见单位(例如1克)的重量系数。然后,恕我直言,您可以按单位名称轻松使用两个表联接,首先转换为标准单位,然后转换为您的本地单位。恕我直言,使用单位名称作为列名称来维护数据库逻辑没有太大价值。也许您真的需要它(或使用起来非常方便),那么我的建议不适用。

相关问题