民间,
在发布之前我已经进行了非常彻底的搜索,之前无法在任何地方看到这种情况。也许这是不可能的....我正在使用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
我减少了此线程的查询的代码和复杂性,但问题如上所述。我无法控制表结构,因为它们构成了我无法修改的会计系统的一部分(我可以,但我会让一两个人不高兴!)。
希望我已经清楚地解释了这个问题。看起来它应该很简单,但我似乎无法理解它 - 也许我只是盯着看太久了。无论如何,提前感谢您的帮助。
编辑:更改代码以反映突出显示错误的第一个回复。
答案 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;')