【问题标题】:Dynamically grab a specific column from a joined table从连接表中动态获取特定列
【发布时间】:2021-09-29 14:13:31
【问题描述】:

我有一个非常复杂的查询,它已经从近 10 个表中提取数据并且还在增长,我需要实现一些不寻常的事情。主表(FROM 表)有一个名为 SIZEPOS 的字段,它是一个从 1 到 25 的索引号。别名为 siz 的连接表具有与主表相应的连接字段(一些外部 ID) ,还有字段,如SIZE1SIZE2、...、SIZE25,其中每个字段都保存一个大小值,即SIZE1 可能保存值6、SIZE2 值8 等。 . 所以我想要在我的查询中包含该连接表的特定 SIZE+[SIZEPOS] 字段。换句话说,如果 SIZEPOS 持有特定产品的值 3,我只想从所有 SIZE1SIZE2SIZE3SIZE4 等中获取字段 siz.SIZE3。 .

我把情况简化得够多了,居然可以给你准备一把小提琴!所以我需要实现的是为SELECT查询的每一行包含适当的SIZE{\d}字段,而不是我使用的硬编码SIZE1......根据我的阅读,这个概念被称为动态列,并且需要一个变量和一个EXEC 命令,但我在 SQL Server 方面的知识还处于起步阶段,所以它完全超出了我的能力......

SELECT sub.ITEID, sub.SUBSTITUTECODE, prod.MAINSZLID, sub.SIZEPOS, siz.SIZE1
FROM @SUBSTITUTE AS sub
INNER JOIN @MATERIAL AS prod ON prod.ID = sub.ITEID
INNER JOIN @SIZELIST AS siz ON siz.CODEID = prod.MAINSZLID;

小提琴可以找到here

【问题讨论】:

  • 这可以使用动态 SQL(或者可能是 UNPIVOT)来完成,但复杂性的根本原因是数据库模型。重复列违反了第一范式数据库设计。最好将列存储为行分隔行。
  • 我无法控制数据库设计。我的任务只是在此桌面应用程序和电子商务网站之间架起一座桥梁……此外,我知道解决我的问题的概念称为动态列……这就是我所知道的一切!呵呵!你能提供一些我可以用于我的情况的代码吗?

标签: sql-server tsql dynamic-columns


【解决方案1】:

..

CHOOSE(sub.sizepos, SIZE1, SIZE2, SIZE3, SIZE4, SIZE5, SIZE6, SIZE7, SIZE8, SIZE9, SIZE10, SIZE11, SIZE12, SIZE13, SIZE14, SIZE15, SIZE16, SIZE17, SIZE18, SIZE19, SIZE20, SIZE21, SIZE22, SIZE23, SIZE24, SIZE25) 

【讨论】:

  • 天啊,我浏览了文档,这似乎正是我所需要的!简单,但有效。并且因为 SIZE{d} 字段的数据很小,所以也不会对性能产生影响!更重要的是,它与服务器上运行的 SQL Server 2014 兼容!等我回到电脑前,我会尝试并报告!
  • 我刚试了一下,效果很好!非常感谢你! :D
  • .. @FayeD。 ..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 1970-01-01
  • 2021-10-16
相关资源
最近更新 更多