gpt4 book ai didi

SQL Server 根据返回的数据动态更改 SELECT 中的 WHERE 子句

转载 作者:行者123 更新时间:2023-12-02 08:32:07 25 4
gpt4 key购买 nike

我主要是一名表示层/逻辑层开发人员,不太喜欢使用 SQL,但我有一个问题,我想知道它在 SQL 中是否不可能,因为它不是一种完整的编程语言。

  • 我有一个 ContactID 字段,它附加了一个 CompanyID
  • 在另一个表中,CompanyID 附加到 CompanyName
  • 我正在尝试创建一个 SELECT 语句,该语句返回一个联系人 ID,并在一个单独的列中返回与此联系人相关的所有公司的汇总(按名称)。

E.G

ContactID - CompanyID - CompanyName
***********************************
1 001 Lol
1 002 Haha
1 003 Funny
2 002 Haha
2 004 Lmao

我要回去

ContactID - Companies
*********************
1 Lol, Haha, Funny
2 Haha, Lmao

我找到了一次使用一个 ContactID 的逻辑:

SELECT x.ContactID, substring(
(
SELECT ', '+y.CompanyName AS [text()]
FROM TblContactCompany x INNER JOIN TblCompany y ON x.CompanyID = y.CompanyID WHERE x.ContactID = 13963
For XML PATH (''), root('MyString'), type
).value('/MyString[1]','varchar(max)')
, 3, 1000)
[OrgNames] from TblContact x WHERE x.ContactID = 13963

正如您在这里看到的,我在 ContactID 13963 中进行了硬编码,这是只返回此人链接到的公司所必需的。

问题是当我想在更大范围的 SELECT 中按行返回此聚合信息时(在充满 ContactID 的整个表上)。

我想要 x.ContactID = (this.ContactID) 但我不知道怎么做!

如果做不到这一点,我是否可以运行一条语句来返回 ContactID 列表,然后在同一个 StoredProc 中运行另一条循环遍历此 ContactID 列表的语句(基本上执行第二条语句 x 次,其中 x = ContactID 的编号)?

感谢任何帮助

最佳答案

你想要一个相关的子查询:

SELECT ct.ContactID,
stuff((SELECT ', ' + co.CompanyName AS [text()]
FROM TblContactCompany cc INNER JOIN
TblCompany co
ON cc.CompanyID = co.CompanyID
WHERE cc.ContactID = ct.ContactId
For XML PATH (''), root('MyString'), type
).value('/MyString[1]', 'varchar(max)'),
1, 2, '')
[OrgNames]
from TblContact ct;

注意内部子查询的 where 子句。

我还做了另外两个更改:

  1. 我更改了表别名以更好地表示表名。这使得查询更容易理解。 (另外,必须更改别名,因为您在外部查询和内部查询中使用了 x。)
  2. 我用 stuff() 替换了 substring(),这正是您想要的。

关于SQL Server 根据返回的数据动态更改 SELECT 中的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547298/

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