2015-07-15 2 views
0

Folks,SQL Multiple играя на одном столе с тем, где пункт

У меня был довольно тщательный поиск перед размещением и не мог видеть это ранее ответил везде. Возможно, это невозможно .... Я использую SQL-сервер 2008 R2

В любом случае, заблаговременно за поиск/помощь.

У меня есть две таблицы, к которым я бы хотел присоединиться.

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

Table2 (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

Я попробовал различные присоединяется рода и союза, но, похоже, не могут получить результаты выше. В большинстве случаев результат ничем, или столбец «Сумма», возвращающийся как удвоенный требуемый результат.

Моя отправная точка:

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

hi @ RicoS321, почему u исключить ID 30? –

+0

Мне не нужны данные, связанные с ID 30. Я включил его в таблицу, чтобы показать, что будет несколько идентификаторов, и я не всегда хотел бы извлечь все данные из таблицы. – RicoS321

+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,'[email protected]+',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 ('[email protected]+') 
) AS PivotTable;') 
Смежные вопросы