与Where子句在同一个表上的SQL Multiple Joins

时间:2015-07-15 14:58:57

标签: join sql-server-2008-r2 multiple-columns where-clause

民间,

在发布之前我已经进行了非常彻底的搜索,之前无法在任何地方看到这种情况。也许这是不可能的....我正在使用SQL Server 2008 R2

无论如何,提前感谢寻找/帮助。

我有两张桌子,我想加入。

表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

我正在尝试从上表中返回以下内容: 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列返回为所需结果的两倍。

我的出发点是:

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

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

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

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

1 个答案:

答案 0 :(得分:0)

请试试这个。我认为这可以帮助您实现结果。

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;')