SQL Server:如果列的名称包含单词,如何SUM列值?

mar*_*lyn 1 sql sql-server sum calculated-columns

在我的SQL表中:

Period| Brand A small Bags| Brand A big bags| Brand D Shoes| ...|  Brand X Shoes
2010  |   10              | 20              | 30           | ...| 200           
Run Code Online (Sandbox Code Playgroud)

如何对列名称中包含某些单词(例如鞋子)的列进行求和?

预期成绩:

Period | Sum of Bags | Sum of Shoes | ..
2010   | 30          | 230          | ..
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 10

您不能没有动态SQL并查询information_schema表或对其进行硬编码.您可以重构您的数据,可能是以下内容吗?

Brands (BrandId, BrandName)
ItemTypes (ItemId, ItemName)
Stock(BrandId, ItemId, Period, Quantity)
Run Code Online (Sandbox Code Playgroud)

编辑

可能还有更多的原因,但这也是您当前表结构存在问题的原因.

  • 表中的最大列数为1024,因此您无法为每次出现的品牌/项目排列添加列.

  • 如果一个品牌生产包包和鞋子,您将多次重复关于该品牌的信息.任何时候重复这样的信息都有可能会出现轻微的差异和异常现象.此外,如果品牌更改了名称,您需要更新列以及引用它的所有代码.

  • 您不能进行简单的计算,例如在不对所有排列进行硬编码的情况下对所有行李进行求和,并在添加新品牌时记住更新该代码.

  • 你根本不能做一些询问(或者至少没有很大的困难) - 例如带回所有供应鞋子的品牌的名称.