2012-06-29 44 views
0

在Oracle 10g數據庫中,我想構建一個SQL查詢,該查詢僅在存在多個行結果時返回結果行。如何僅在有多個結果時返回行

它可能和如何?

+2

你爲什麼要這樣做?是否有理由不能在查詢之外執行此邏輯? –

+1

我建議你檢查你的查詢將返回的列表大小。 – manurajhada

+0

邏輯必須在SQL查詢中,因爲這個被另一個我們無法添加邏輯的框架使用。 – WolveFred

回答

7

你需要計算返回結果的數量,如果你不想做一團的,你可以使用以下命令:

SELECT * 
    FROM (SELECT col1, 
       col2, 
       COUNT(*) OVER() cnt 
      FROM your_table 
     WHERE <conditions>) 
WHERE cnt > 1 
+0

完美!謝謝。 – WolveFred

+0

這不需要標識符嗎?它會像現在一樣工作嗎?我不得不添加類似下面的東西來使它工作...'SELECT * FROM(SELECT col1,col2,COUNT(*)cnt FROM your_table WHERE )as tInfo WHERE tInfo.cnt> 1;'。 –

0

你需要像下面這樣的結果?

c1 c2 
1 AA 
1 BB 
2 CC 

結果:

c1 c2 
1 AA,BB 
2 CC 

下都能滿足您的要求。

select c1,ltrim(sys_connect_by_path(c2,','),',') from (
    select c1,c2, row_number() over(partition by c1 order by c2)rn, 
        count(*) over(partition by id) cnt from XXX -- XXX: your table 
       ) a where level=cnt 
       start with rn=1 connect by prior c1=c1 and prior rn=rn-1 
+0

它不符合我的要求。 – WolveFred

1
select * from 
    (select column1,column2,column3, 
    (select count(*) from table1 where '*XYZ Condition*') as rowCount 
    from table1 where '*XYZ Condition*') 
where rowCount > 1; 

你只需要把相同的條件下,在這兩個地方在查詢即「XYZ條件」是在兩個where條款相同。

+0

這有效,但它執行相同的查詢兩次(兩個「where」條件)。 – WolveFred

+0

只是一個合乎邏輯的方法.. – manurajhada

相關問題