gpt4 book ai didi

一列中有多个值的 SQL 查询

转载 作者:行者123 更新时间:2023-12-02 03:57:12 27 4
gpt4 key购买 nike

我一直在 table 上敲着头试图解决这个问题。我有一个表,用于存储作业信息以及作业未完成的原因。原因为数字、01、02、03 等。待处理的工作可能有两个原因。如果您选择两个原因,它们将存储在同一列中,并以逗号分隔。这是 JOBID 表中的示例:

Job_Number     User_Assigned     PendingInfo

1 user1 01,02

还有另一个名为Pending的表,它存储这些值实际表示的内容。 01=信息不足,02=时间不够,03=等待审核。示例:

Pending_Num    PendingWord

01 Not Enough Info
02 Not Enough Time

我想做的是查询数据库以提供所有作业编号、用户、待处理信息和待处理原因。我可以分解第一个值,但不知道如何分解第二个值。到目前为止我的技能有限:

select Job_number,user_assigned,SUBSTRING(pendinginfo,0,3),pendingword
from jobid,pending
where
SUBSTRING(pendinginfo,0,3)=pending.pending_num and
pendinginfo!='00,00' and
pendinginfo!='NULL'

我希望在这个例子中看到的是:

Job_Number  User_Assigned   PendingInfo   PendingWord       PendingInfo  PendingWord

1 User1 01 Not Enough Info 02 Not Enough Time

提前致谢

最佳答案

如果您的 SQL 想要单独处理多个项目,您确实不应该将它们存储在一列中。在这些情况下,您必须执行的“SQL 体操”既是丑陋的黑客行为,又会降低性能。

理想的解决方案是将各个项目拆分为单独的列,并且对于 3NF,如果您确实想要正确执行此操作,请将这些列作为行移动到单独的表中(但初步步骤可能是好吧,如果你确定在中短期内不会有超过两个原因)。

那么您的查询将变得更简单、更快。

<小时/>

但是,如果这不是一个选择,您可以使用前面提到的 SQL 操作来执行以下操作:

where find ( ',' |fld| ',', ',02,' ) > 0

假设您的 SQL 方言具有字符串搜索功能(在本例中为 find,但我认为 SQLServer 的 charindex)。

这将确保所有子列都以逗号开头(逗号加字段加逗号),并查找特定的所需值(两侧都有逗号以确保它是完整的子列匹配)。

<小时/>

如果您无法控制应用程序在该列中放置的内容,我会选择 DBA 解决方案 - DBA 解决方案被定义为 DBA 必须采取的措施来解决其不足之处用户:-)。

在该表中创建两个新列,并创建一个插入/更新触发器,该触发器将用用户放入原始列中的两个原因填充它们。

然后查询这两个列以获取特定值,而不是尝试拆分旧列。

这意味着拆分成本仅在行插入/更新上,而不是在_每个单个选择上,从而有效地摊销该成本。

<小时/>

不过,我的答案是重新构建架构。从长远来看,这将是速度、可读查询和可维护性方面的最佳方式。

关于一列中有多个值的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2800104/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com