SQL - 根据另一个查询的结果创建连接/查询。 Join表将来自另一个查询的结果

时间:2016-02-12 16:42:03

标签: sql join dynamic

我希望你能帮助我。

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

例如:

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

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

然后使用这个'Reference'值,我需要保持对这些值的连接,并且还返回以下查询的总和。 如果我在每个左连接中对参考进行硬编码,则下面的查询工作正常。 但是我需要根据它返回的引用项的数量使它全部动态,它将创建查询。

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

2 个答案:

答案 0 :(得分:2)

这是你需要的吗?

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'

答案 1 :(得分:1)

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

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

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