2015-03-25 88 views
-2

我連接兩個SQL的時候遇到問題,最後一個輸出不是兩個。 這兩個SQL的工作正常獨奏sql oracle連接兩個sql的輸出

我的SQL的有以下幾種:

SQL 1:

select 
table2.displayvalue, 
(count(table2.displayvalue)*5) 
from 
table1, 
table2 
where 
table1.abteilung = table2.STOREDVALUE 
and table1.AKTIV = 1 
group by table2.displayvalue 

SQL的1個輸出:

column#1_1 column#2_1 

Blue  15 
Red   5 
Yellow  15 
Pink  120 
Black  75 
LessBlack 20 
MoreBlack 140 
Green  10 
DarkRed  10 
FireRed 135 
FireGreen 25 
LessGreen 5 

SQL 2:

SELECT Projektabteilung, 
     SUM(DATUM) TAGEIST 
FROM(
     select 
     table2.DISPLAYVALUE Projektabteilung, 
     table1.IDENTNAME, 
     count(DISTINCT trunc(table4.datum)) DATUM 
     from 
     table2, 
     table1, 
     table3, 
     table4 
     where 
     table1.ABTEILUNG = table2.STOREDVALUE 
     and table1.PROJEKTBENUTZERID = table3.PROJEKTBENUTZERFK 
     and table3.PROJEKTMITARBEITERID = table4.PROJEKTMITARBEITERFK 
     AND table4.datum BETWEEN sysdate-7 and sysdate 
     AND TO_CHAR(table4.datum, 'D') NOT IN ('6', '7') 
     group by table2.DISPLAYVALUE,table1.IDENTNAME) 
GROUP BY Projektabteilung 

SQL的2輸出:

column#1_2  column#2_2 

Pink   35 
Black   9 
LessBlack  7 
Moreblack  17 
FireRed  30 
FireGreen  2 

最後,運行SQL,我想有以下輸出:

column#1_1 & column#2_1 together | column#1_2 | column#2_2 

Blue        15    0    
Red        5    0 
Yellow       15    0 
Pink        120    35 
Black        75    9 
LessBlack       20    7 
MoreBlack      140    17 
Green        10    0 
DarkRed       10    0 
FireRed       135    30 
FireGreen       25    2 
LessGreen       5    0 

我什麼都試過,但其殺死我。你有幫助嗎?

謝謝!

+3

沒有提供樣本數據,表格,預計輸出其:

編輯的問題得到增強後

看來你想做的事外連接上第一列在水晶球中看到的東西...;) – 2015-03-25 10:11:28

+0

我編輯了我的帖子 - 希望現在清楚 – piguy 2015-03-25 10:13:37

+0

不是。不清楚。嘗試提供SQL小提琴或表格定義和查詢。這當然可以做到,但爲了幫助你,我們需要細節。 – 2015-03-25 10:16:10

回答

1

你既沒有發佈你的表結構也沒有你的查詢,所以這是很難回答的。

如果您可以添加某種從第一個查詢到第二個查詢的行「映射」行的列,那麼可以這樣做。

with headline_1 (headline, rn) as (
    select ..., --<<< your original columns go here 
     row_number() over (order by something) as rn 
    from ... 
), headline_2 (headline, rn) as (
    select ..., --<<< your original columns go here 
     row_number() over (order by something) as rn 
    from ... 
)select h1.headline, h2.headline 
from headline_1 h1 
    full outer join headline_2 h2 on h1.rn = h2.rn 
order by h1.rn; 

row_number() over (order by something) as rn生成用於在結果的每一行,並從兩個查詢中的行的唯一號碼通過該號碼匹配。你應該找到一個排序列,讓你穩定的排序。像你想

with query_1 (column#1_1, column#2_1) as (
    .. your original first query goes here ... 
), 
query_2 (column#1_2, column#2_2) as (
    .. your original second query goes here ... 
) 
select coalesce(q1.column#1_1, q2.column#1_2) as col1, 
     coalesce(q1.column#2_1, 0) as col2_1, 
     coalesce(q2.column#2_2, 0) as col2_2 
from query_1 q1 
    full outer join query_2 q2 on q1.column#1_1 = q2.column#1_2 
order by 1 
+0

你的答案仍然屬於我編輯的文章嗎? – piguy 2015-03-25 11:41:16

+0

@piguy:聽起來好像你只是想在第一列做一個完整的外連接而已。不需要生成行索引。 – 2015-03-25 11:55:53

+0

感謝您編輯您的文章 - 我現在的問題是我現在不真的如何將您的建議包括在我的代碼中? – piguy 2015-03-25 12:15:46

0

如果您使用PDO進行連接,則可以只執行兩個查詢並使用nextRowSet()前進到第二個查詢。

in php我用這個在第二個查詢中得到插入id。

$q = $db->prepare($query . $queryfieldnames .')'. $queryvalues.');SELECT SCOPE_IDENTITY() as id'); 
    foreach($myarr as $key => $value) { 
     $q->bindParam(':'.$key,$myarr[$key]); 
    } 
    $q->execute(); 
    $q->nextRowSet(); 
    $res = $q->fetch(PDO::FETCH_ASSOC); 
    $insertid = $res['id']; 
+0

Oracle中沒有SCOPE_IDENTITY()' – 2015-03-25 10:17:58

+0

不是爲了打死一匹馬,但我將它作爲我如何使用下一行集的例子。不說我使用oracle。 NextRowSet是pdo驅動程序的一項功能。他可以用他想要的任意查詢替換選擇範圍標識。OP沒有提供足夠的細節,他正在做什麼以及他在做什麼。所以我給出了一個通用答案。 – Tschallacka 2015-03-25 10:20:38