当前位置: 首页 > 面试题库 >

SQL和Coldfusion左连接表将重复的结果作为一列中的列表显示

杜思远
2023-03-14
问题内容

可以说我有两个表:Persons(P_Id,Name)和Orders(O_Id,OrderNo,P_Id)…我想做一个左联接,它是:

SELECT Persons.Name, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.Name

这将给我同一人的不同行号的多个行。我真正需要获得的是每个人一行,并且列表中属于该人的所有OrderNo。

使用Coldfusion,我可以查询Persons表,遍历每条记录,并针对每条记录对Orders进行查询,并获取该P_Id的结果并将其放在列表中,并将其作为新的“
OrdersList”添加到我的第一个查询中。但是我有成千上万的记录,这意味着要进行成千上万的查询!必须有更好的方法来做到这一点!


问题答案:

查找FOR XML-这样您就可以查看订单号。

看一下这个

With Person AS
(
    Select 1 PersonId, 'John' PersonName
    Union Select 2, 'Jane'
),
Orders As
(
    Select 1 OrderId, 1 PersonId, Convert (DateTime, '1/1/2011') OrderDate
    Union Select 2, 1 , Convert (DateTime, '1/2/2011')
    Union Select 3, 1 , Convert (DateTime, '1/5/2011')
    Union Select 4, 1 , Convert (DateTime, '1/7/2011')
    Union Select 5, 1 , Convert (DateTime, '1/9/2011')
    Union Select 6, 2 , Convert (DateTime, '1/2/2011')
    Union Select 7, 2 , Convert (DateTime, '1/5/2011')
    Union Select 8, 2 , Convert (DateTime, '1/7/2011')
)
Select PersonId, 
(
    Select STUFF((SELECT  ', ' + cast(O.OrderId as nvarchar)
    FROM Orders O
    Where 1=1
        And O.PersonId = Person.PersonId
    FOR XML PATH('')), 1, 1, '') 
) OrderList
From Person

输出是

PersonId    OrderList
----------- -----------------------
1            1, 2, 3, 4, 5
2            6, 7, 8

(2 row(s) affected)


 类似资料:
  • 在这个示例中,我有两个表,包含我的客户和一家办公用品商店的产品的数据。如下所示: 上面的表主要功能是为第三个表,即订单表,提供所需的数据 使用订单表,我可以从客户和产品表中获得我需要的报告的快速摘要。当我想查看每个客户每件商品的购买数量时,问题就开始了。 比如这些表格。 使用上面的表格,我需要创建一个报告,显示每个项目的每个客户的购买数量。 像这样。 我已经使用通过来显示项目,但是我现在的代码太长

  • 我正在尝试计算并从表中获得列的和。我试图通过函数获取列的和。但是它不能正常工作,我得到的列的和行的次数存在于中。 我在的union表中不是很好,你能帮助我如何在我的代码中使用union函数吗。我展示了这个StackOverflow上的多个线程,但相信我,它很难理解,而且非常大。这就是为什么我在这里做了一个小桌子的帮助和容易理解。 先生,请帮我别把它标为重复和关闭的。我尝试了过去的1个星期,但没有代

  • Vavr似乎解决了我的一个问题,一些方法进行了大量检查,并返回CalculationError或CalculationResult。 我有一个存储错误和结果的包装器 是否有任何简洁的解决方案来转换来自集合的流

  • 问题内容: 我是python的初学者。我想将sql结果转换为列表。这是我的代码: 我的表中有6列,但是此代码不会创建6元素列表。我在哪里做错了? 问题答案: 如果你有一个迭代在Python,做一个列表,可以简单地调用了内置: 请注意,可迭代项通常与列表一样有用,并且可能会变得更懒惰,因此效率更高。 您的原始代码失败了,因为它没有太多意义。您遍历行并枚举它们,这样就得到等等…-这意味着您正在建立第n

  • 我有一个名为的表和一个名为的表。它们通过作为pivot具有多对多的关系。透视表具有和 所以每个表单可以有很多类别,每个类别可以附加到很多表单上。 我需要以某种方式汇总这些数据。我需要的是一个逗号分隔的类别ID的列表在一列中为每个表单。 像这样: 做这件事的有效方法是什么?

  • 问题内容: 我有一个带有下表的WordPress数据库 帖子 后元 并有记录与值和 如何编写SQL以显示列名和结果列名? 下面的查询是我的起点 问题答案: 这听起来像你想的和值。不幸的是,MySQL没有函数,但是您可以使用带有以下语句的聚合函数来复制它: 参见带有演示的SQL Fiddle