【问题标题】:SQL - Create a join / query based on the results of another query. The Join table would be from the results of another querySQL - 根据另一个查询的结果创建连接/查询。连接表将来自另一个查询的结果
【发布时间】:2016-05-23 21:53:42
【问题描述】:

希望你能帮助我。

我需要创建一个查询,该查询将使用动态结果中的值作为左连接表。

例如:

此查询将始终返回不同的值。基于每个@itemid。

SELECT DISTINCT [Reference]
FROM TABLE_ABC
WHERE ID = @ItemId 

然后使用此“参考”值,我需要在该值上左连接并返回其总和,如下面的查询。 如果我在每个左连接中硬编码参考,下面的查询就完美了。 但我需要使这一切成为动态的,它将根据它返回的参考项的数量创建查询。

SELECT 
SUM(x.Value)  [Ref A],
SUM(x1.Value) [Ref B],
SUM(x2.Value) [Ref C]
FROM TABLE_YZ yz
LEFT JOIN TABLE_ABC x   ON yz.id = x.id AND x.Reference = 'Ref A'
LEFT JOIN TABLE_ABC x1  ON yz.id = x.id AND x1.Reference = 'Ref B'
LEFT JOIN TABLE_ABC x2  ON yz.id = x.id AND x2.Reference = 'Ref C'

谁能给我一些关于如何创建这个脚本的建议? 或者我要寻找什么?

非常感谢。

安德森

** 示例结果:

Total ---- Ref A ---- Ref B ---- Ref C ---- Ref D ---- Ref E ---- 等等........

1,000.00 ---- 100.00 ---- 200.00 ---- 300.00 ---- 250.00 ---- 250.00

【问题讨论】:

  • 只需将连接表改成带括号()的子查询,并给它一个别名
  • 什么关系型数据库? mySQL,SQL服务器?由于使用了 [],因此猜测 SQL 服务器。并且....它 table_yz 您与第一个查询不同的列表?最后它们需要是列吗?这似乎通过或使用分析作为一个小组会更容易。
  • SQL Server - 谢谢
  • budirec - 谢谢。不幸的是,我看不出你的意思。可以举个例子吗?
  • 我需要查看一些具有预期结果的示例数据我不确定您在这里要做什么。

标签: sql join dynamic


【解决方案1】:

这是你需要的吗?

SELECT 
SUM(x.Value)  [Ref A],
SUM(x1.Value) [Ref B],
SUM(x2.Value) [Ref C],
SUM(x3.Value) [Ref D]
FROM TABLE_YZ yz
LEFT JOIN TABLE_ABC x   ON yz.id = x.id AND x.Reference = 'Ref A'
LEFT JOIN TABLE_ABC x1  ON yz.id = x.id AND x1.Reference = 'Ref B'
LEFT JOIN TABLE_ABC x2  ON yz.id = x.id AND x2.Reference = 'Ref C'
LEFT JOIN (SELECT DISTINCT [Reference]
           FROM TABLE_ABC
           WHERE ID = @ItemId) x3 ON yz.id = x.id AND x3.Reference = 'Ref D'

【讨论】:

    【解决方案2】:

    我不确定为什么这样的事情行不通。它为您提供行而不是列...

    Select Sum(x.value), reference
    from table_abc
    where ID = @itemID
    group by reference
    

    如果您需要列,您可以使用动态 SQL 并旋转列。或者如果你总是知道会有 3 个引用,我们可以用 case 语句和行号做一些不同的事情。

    【讨论】:

    • xQbert - 谢谢 - 为了显示目的,它需要在列中。数据透视列可能会起作用。列数未知
    • xQbert - 如果我使用您提供的示例,它将所有值相加为相同,并且不会根据每个单独的参考对值求和。
    • @user2216540 我不明白为什么它在第二条评论之后不起作用。除了将行旋转到列之外,它似乎应该是一个简单的组。通常这可以在报告工具或 PHP 或 .net 或任何从 SQL 呈现结果的应用程序中完成。
    猜你喜欢
    • 2013-10-28
    • 2017-11-14
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多