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;')
各位,
我在发布之前进行了非常彻底的搜索,之前在任何地方都看不到这个答案。也许这是不可能的....我正在使用 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;')