2016-02-12 2 views
0

Надеюсь, вы можете мне помочь.SQL. Создайте соединение/запрос на основе результатов другого запроса. Таблица Join будет получена из результатов другого запроса.

Мне нужно создать запрос, который будет использовать значения из динамического результата для использования в качестве левой таблицы соединений.

Например:

Этот запрос будет возвращать разные значения все время. На основе каждого @itemid.

SELECT DISTINCT [Reference] 
FROM TABLE_ABC 
WHERE ID = @ItemId 

Затем, используя эти значения «Reference», мне нужно левое соединение по этим значениям, а также вернуть сумму для этого, как для запроса ниже. Нижеприведенный запрос работает идеально, если я жестко закодировал ссылку в каждом левом соединении. Но мне нужно сделать все это динамическим, чтобы он создавал запрос в зависимости от количества возвращаемых элементов Reference.

SELECT 
SUM(x.Value) [Ref A], 
SUM(x1.Value) [Ref B], 
SUM(x2.Value) [Ref C] 
FROM TABLE_YZ yz 
LEFT JOIN TABLE_ABC x ON yz.id = x.id AND x.Reference = 'Ref A' 
LEFT JOIN TABLE_ABC x1 ON yz.id = x.id AND x1.Reference = 'Ref B' 
LEFT JOIN TABLE_ABC x2 ON yz.id = x.id AND x2.Reference = 'Ref C' 

Может ли кто-нибудь дать мне несколько советов о том, как создать этот скрипт? Или что мне искать?

Большое спасибо.

Андерсон

** Образец Результаты:

Итого ---- REF A ---- ---- B Ссылка Ссылка Ссылка С ---- ---- D Ссылка E - --- и так далее ... ..

1,000.00 ---- ---- 100,00 200,00 300,00 ---- ---- ---- 250,00 250,00

+0

Просто измените объединенную таблицу на дополнительный запрос с помощью скобок() и дайте ей псевдоним – budirec

+0

, что RDBMS? mySQL, SQL-сервер? предполагая SQL-сервер с []. И .... это table_yz ваш отличный список из 1-го запроса? и, наконец, они должны быть столбцами? это кажется, что было бы легче, как группа, используя аналитику. – xQbert

+0

SQL Server - Спасибо – user2216540

ответ

1

Я не уверен, почему что-то вроде это не сработает. Он дает вам строки вместо столбцов ...

Select Sum(x.value), reference 
from table_abc 
where ID = @itemID 
group by reference 

Если вам нужны столбцы, вы можете использовать динамический SQL и разворачивать столбцы. или если вы всегда знаете, что будет 3 ссылки, мы можем сделать что-то другое с операторами case и номером строки.

+0

xQbert - Спасибо. Он должен быть в столбцах для отображения цели. Столбцы столбцов могут работать.Количество столбцов неизвестно – user2216540

+0

xQbert - если я использую предоставленный вами эквалайзер, он будет суммировать все значения одинаковыми, и он не будет суммировать значения на основе каждой отдельной ссылки. – user2216540

+0

XQbert - Это сработало !!! Спасибо!!!!! :) – user2216540

2

Возможно ли это, что вам нужно?

SELECT 
SUM(x.Value) [Ref A], 
SUM(x1.Value) [Ref B], 
SUM(x2.Value) [Ref C], 
SUM(x3.Value) [Ref D] 
FROM TABLE_YZ yz 
LEFT JOIN TABLE_ABC x ON yz.id = x.id AND x.Reference = 'Ref A' 
LEFT JOIN TABLE_ABC x1 ON yz.id = x.id AND x1.Reference = 'Ref B' 
LEFT JOIN TABLE_ABC x2 ON yz.id = x.id AND x2.Reference = 'Ref C' 
LEFT JOIN (SELECT DISTINCT [Reference] 
      FROM TABLE_ABC 
      WHERE ID = @ItemId) x3 ON yz.id = x.id AND x3.Reference = 'Ref D' 
+0

Позвольте мне проверить это! :) – user2216540

Смежные вопросы