Sql server 能否在SQL中将多个列名设置为要查询的宏?
能否将SQL表中的多个列名设置为SQL中要查询的宏 例如,我多次遇到多个列,我是否可以使用宏或某种类型的引用来识别它们一次,以避免重复显示它们并使代码混乱 当前的代码可以工作,我只是在寻找一个更干净/精简的选项 当前代码:Sql server 能否在SQL中将多个列名设置为要查询的宏?,sql-server,tsql,Sql Server,Tsql,能否将SQL表中的多个列名设置为SQL中要查询的宏 例如,我多次遇到多个列,我是否可以使用宏或某种类型的引用来识别它们一次,以避免重复显示它们并使代码混乱 当前的代码可以工作,我只是在寻找一个更干净/精简的选项 当前代码: WHERE ('ABC') IN ([CODE1],[CODE2],[CODE3],[CODE4],[CODE5],[CODE6],[CODE7],[CODE8] ,[CODE9],[CODE10],[CODE11],[CODE12],[CO
WHERE ('ABC') IN
([CODE1],[CODE2],[CODE3],[CODE4],[CODE5],[CODE6],[CODE7],[CODE8]
,[CODE9],[CODE10],[CODE11],[CODE12],[CODE13],[CODE14],[CODE15]
,[CODE16],[CODE17],[CODE18],[CODE19],[CODE20],[CODE21],[CODE22]
,[CODE23],[CODE24],[CODE25]
AND ('CFS') IN
([CODE1],[CODE2],[CODE3],[CODE4],[CODE5],[CODE6],[CODE7],[CODE8]
,[CODE9],[CODE10],[CODE11],[CODE12],[CODE13],[CODE14],[CODE15]
,[CODE16],[CODE17],[CODE18],[CODE19],[CODE20],[CODE21],[CODE22]
,[CODE23],[CODE24],[CODE25]
ect...(20 more times)
目标:
这是继承的代码,看起来非常笨拙
谢谢像这样编号的列几乎总是一个标志,表明您应该有一个额外的表。因此,如果您现有的表结构如下所示: Table1 Table1ID, OtherFields, Code1, Code2, Code3.... Code25 Table1 Table1ID, OtherFields Table1Codes Table1ID, Code 或
像这样编号的列几乎总是一个标志,表明您应该有一个额外的表。因此,如果您现有的表结构如下所示: Table1 Table1ID, OtherFields, Code1, Code2, Code3.... Code25 Table1 Table1ID, OtherFields Table1Codes Table1ID, Code 或
如果无法更改表的模式(通常情况下),则可以
UNPIVOT
it。例如,假设CODE1
…CODE25
来自MyTable
,将UNPIVOT
操作包装在CTE中:
;WITH
cte AS
(
SELECT upvt.*
FROM MyTable
UNPIVOT (
CodeValue FOR CodeLabel IN ([CODE1], [CODE2], ..., [CODE25])
) upvt
)
SELECT *
FROM cte
WHERE CodeValue IN ('ABC', 'DEF', ...)
取消PIVOT操作不是免费的。在取消激活该表之前,请确保尽可能多地从
MyTable
中进行筛选。如果无法更改该表的架构(通常情况下),则可以取消激活该表。例如,假设CODE1
…CODE25
来自MyTable
,将UNPIVOT
操作包装在CTE中:
;WITH
cte AS
(
SELECT upvt.*
FROM MyTable
UNPIVOT (
CodeValue FOR CodeLabel IN ([CODE1], [CODE2], ..., [CODE25])
) upvt
)
SELECT *
FROM cte
WHERE CodeValue IN ('ABC', 'DEF', ...)
取消PIVOT操作不是免费的。在取消激活之前,请确保尽可能多地从MyTable
中进行筛选。您可以创建一个值表,然后使用join
或中存在的任何有效的或。如果我理解你的目的。你是否在寻找一种方法,使你不必实际编写查询?这里没有足够的细节让你得到任何具体的帮助。如果你通读一遍,然后用详细信息编辑你的问题,你会在这里有更好的体验。有关提示,请参阅。害怕的人你不知道如何回答一个明智的问题…;)我将尝试重新措辞并添加一些细节。我认为有一个更优雅的解决方案,使用交叉应用和(values(CODE1),(CODE2),…(CODE25))
。您可以创建一个值表,然后使用连接或中存在的或子句中有效的。如果我理解你的目的。你是否在寻找一种方法,使你不必实际编写查询?这里没有足够的细节让你得到任何具体的帮助。如果你通读一遍,然后用详细信息编辑你的问题,你会在这里有更好的体验。有关提示,请参阅。害怕的人你不知道如何回答一个明智的问题…;)我将尝试重新措辞并添加一些细节。我认为使用交叉应用和(值(CODE1),(CODE2),…(CODE25))
是一种更优雅的解决方案。我不能拆分表格,但我可以创建一个新表格。这似乎更有效率。非常感谢。有道理。我不能拆分表格,但我可以创建一个新表格。这似乎更有效率。非常感谢。这很有趣,也可能有效。我将进一步探讨这一点。非常感谢。这很有趣,也可能有效。我将进一步探讨这一点。非常感谢。