如何为某些列而不是其他列链接SQL表的行?

时间:2016-10-12 16:45:49

标签: sql sql-server tsql sql-server-2012

我在excel中有一个值表,我想将其作为查找表放入sql中。表格如下:

excel table in question

sql表如下所示:

SQL Table

在SQL中使用它,我现在想永远不再使用excel文件。 我还需要能够更改参数,但是excel文件中的一些参数通过合并单元格进行链接,从而共享相同的值,如果它更改为一个更改的全部。 例如:当我更改产品1的参数B时,我需要它来更改产品2,3,4和5,因为它们在excel表中共享相同的单元格。如果我更改产品2的参数A,它只会更改产品2和3.我正在寻找 SQL查询解决方案。我也有能力改变表格结构。 这是我的示例查询:

Update [Table] Set [Parameter_A] = '{new_parameter_tag}' 
     Where [product] = '{selected_product_tag}'

除了我想让Where包含从excel表共享同一个单元格的所有行。 我希望能够一次更新多个产品的SQL表,具体取决于它们是否在excel文件中共享该参数的相同单元格。 这是我对答案的初步猜测:

Select [{Parameter}],[Product],[Extra_column]
From [Table] 
Where [Product] = '{selected_product}'

这将返回一行和[Extra_column],其中包含同一单元格分组中其他人共享的分组编号。然后将其存储为{Extra_column}。然后:

Update [Table] Set [{Parameter}] = '{new_parameter_value}'
Where [product] = '{selected_product}' Or [Extra_column] = '{Extra_Column}'

这需要两个查询,这也意味着我需要的列数是以前的两倍。我正在寻找一些更优雅的东西。

这是SQL Server 2012,而{}表示我从脚本传递的值。

1 个答案:

答案 0 :(得分:0)

我最终做了类似于上面的事情,用户输入了他们想要编辑的组(在查看表格时很容易找出你想要的那个):

Update [table]
Set [{Parameter}]={NewValue}
Where [Extra_Column] = '{Extra_Column}'

我必须为分组索引添加三列,但是超过43个参数不会增加我的表大小。我没有考虑到如果我为单个产品更改单个参数而将其从"组"中删除的事实。本质上仅用于该参数,如果我对该参数进行组更改,我将覆盖更改的值。我可以添加一个检查,只更改该组内匹配的值,但无论哪种方式,用户都必须明智地了解他们的工作。幸运的是,他们可以在改变之前看到桌子。