2009-10-13 4 views
0

У меня есть таблица со структурой, такой как таблица (PK, a, b, c, d, e, f, g).SQL-соединение по многим запросам

И у меня есть много вопросов, которые я хочу присоединиться:

select PK, sum(c) where... 

JOIN 

select PK, sum(e) where... 

JOIN 

select PK, sum(g) where ... 

JOIN 

select PK,a,b,d,f 

Каждой суммы (с | е | г) на самом деле

select sum(c|e|g) from .... where... 

, потому что есть много условий, участвующих (не все c | e | g должны быть добавлены)

Это лучший способ сделать это? Мне предложили написать его в PL/SQL, который мне нужно будет изучить. Если это будет способ, я сделаю это, но я не уверен, что случилось с решением, показанным выше.

Редактировать

Im очень уверенный в себе. Вот что я хочу.

мне нужно, чтобы получить результирующий набор в виде:

PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G 

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

Каждый из COMPLEX ... - другой выбор (выберите сумму ...). Это очень большой стол, и писать

select a,b,(select sum..),d,(select sum...),f,(select sum...) 

даст плохую производительность (так мне сказали, чтобы удалить его)

Я отредактировал мой вопрос выше.

Заранее благодарен.

+2

Вы уверены, что не имеете в виду союз? – erikkallen

+0

Пожалуйста, покажите образцы строк из таблицы ввода и желаемого вывода. Как указывали другие, неясно, хотите ли вы СОЕДИНЕНИЕ или СОЮЗ. Кроме того, у вас может возникнуть существенная проблема с дизайном вашей таблицы (в зависимости от того, как выглядят данные). –

+0

Трудно ответить на этот вопрос, не зная, какие результаты вы ожидаете получить от этого запроса. Я предлагаю вам быстро посмотреть здесь: http://en.wikipedia.org/wiki/Join_%28SQL%29, чтобы узнать, действительно ли это ОБЪЕДИНЕНИЕ, которое вы хотите. –

ответ

3

Я думаю, вы имеете в виду «СОЮЗ», а не «ПРИСОЕДИНЯЙТЕСЬ». Является ли лучший способ, зависит от того, чего вы пытаетесь достичь.

2

Пример объединения заключается в следующем:

Select a.col1, b.col2 
FROM table1 a, table2 b 
WHERE a.key = b.key; 

, который также может быть написано:

SELECT a.col1, b.col2 
FROM table1 a 
INNER JOIN table2 b 
ON a.key = b.key; 

Edit:

После прочтения повторного редактирования оригинала вопрос, вы, вероятно, можете использовать JOIN. JOINs можно использовать, когда у вас есть связанные данные в более чем одной таблице, или вы можете указать одну и ту же таблицу несколько раз. Я использовал оба вида с Oracle. Вот пример последнего рода, который, надеюсь, поможет вам:

SELECT t1.a, t1.b, t3.sum(c), t2.d, t4.sum(e), t1.f, t5.sum(g) 
FROM table1 t1, table1 t2, table1 t3, table1 t4, table1 t5 
WHERE t1.a = 'hello' 
AND t2.a = 'world' 
AND t3.c = 10 
AND t4.e = 20 
AND t5.g = 100 
GROUP BY t1.a, t1.b, t2.d, t1.f; 
+0

Спасибо, но кажется им не достаточно ясно (мой плохой). Я изменил свой вопрос. – Tom

2

Это не четко определенная проблема (пока).

Предполагая, что PK является вашим основным ключом (т.уникальный, по определению), то

SELECT PK, SUM(c) 
FROM tbl 
GROUP BY PK 

является ВСЕГДА такой же, как

SELECT PK, c 
FROM tbl 

Таким образом, группировка (и агрегирование) является относительно бессмысленным.

В ваших ожидаемых результатов:

PK, a,b,COMPLEX_SUM_ON_C,d,COMPLEX_SUM_ON_D,f,COMPLEX_DUM_ON_G 

Как COMPLEX_SUM_ON_C, COMPLEX_SUM_ON_D, COMPLEX_DUM_ON_G связанные с PK?

Мы знаем, как a, b, d, f связаны с PK, потому что для каждого PK можно идентифицировать один и только a, b, d, f в той же строке.

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