SQL 使用 where 子句在同一个 table 上进行多个连接

SQL Multiple Joins on same table with where clause

各位,

我在发布之前进行了非常彻底的搜索,之前在任何地方都看不到这个答案。也许这是不可能的....我正在使用 SQL server 2008 R2

无论如何,提前感谢 looking/helping。

我有两个 table 想加入。

表 1 (t1): Account------Name--------Amount 12345-------account1-----10000.00 12346-------account2-----20000.00

表 2 (t2): ID-----Account---extraData 10-----12345-----ZZ100 20-----12345-----ZZ250 30-----12345-----ZZ400 10-----12346-----ZZ150 20-----12346-----ZZ200

我正在尝试 return 上述 table 中的以下内容: t1.Account---t1.Name------ID1(t2.ID=10)---ID2(td.ID=20)----SUM(Amount) 12345--------account1-------ZZ100------------ZZ250-------------10000.00 12346--------account2-------ZZ150------------ZZ200-------------20000.00

我已经尝试了各种连接和并集,但似乎无法获得上述结果。大多数结果要么什么都没有,要么 Amount 列 return 是所需结果的两倍。

我的出发点是:

Select t1.Account, t1.Name, t2A.extraData, t2B.extraData, SUM(t1.AMOUNT)
from table1 t1 
join table2 t2A on t1.Account = t2A.Account and t2A.ID = '10'
join table2 t2B on t1.Account = t2B.Account and t2B.ID = '20'
Group by t1.Account, t1.Name, t2A.extraData, t2B.extraData

我已经减少了该线程查询的代码和复杂性,但问题如上。我无法控制 table 结构,因为它们构成了我无法修改的会计系统的一部分(我可以,但我会让一两个人不高兴!)。

希望我已经足够清楚地解释了这个问题。看起来应该很简单,但我似乎无法理解它——也许我只是盯着看太久了。无论如何,提前感谢您的帮助。

编辑:更改代码以反映突出显示我发帖错误的第一个回复。

请试试这个。我认为这有助于您实现目标。

DECLARE @ids varchar(max)
SELECT  @ids=STUFF((SELECT DISTINCT ', [' + CAST(ID AS VARCHAR(10))+']'
         FROM t2
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ')
SELECT @ids
EXECUTE ('SELECT
Account,Name,'+@ids+',Amount
FROM
(SELECT t1.Account,Name,ID,ExtraData,SUM(Amount) AS Amount
    FROM t1 t1 INNER JOIN t2 t2 ON t1.Account=t2.Account
    GROUP BY t1.Account,Name,ID,ExtraData) AS SourceTable
PIVOT
(
MAX(ExtraData)
FOR ID IN ('+@ids+')
) AS PivotTable;')