2017-03-16 55 views
-4

我使用的是Oracle 11g,我有一個返回兩行或更少的查詢,財產以後這樣如何這兩行顯示爲一行

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
║ 2   ║ John  ║ 
╚═══════════╩═════════════╝ 

而且它也可以看看返回此

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
║ 1   ║ Steve ║ 
╚═══════════╩═════════════╝ 

或者這

╔═══════════╦═════════════╗ 
║ Number ║ NAME  ║ 
╠═══════════╬═════════════╣ 
║ 1   ║ Steve ║ 
╚═══════════╩═════════════╝ 

我想重新排列數據,因爲這

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ John  ║ 
╚═══════════╩═════════════╩═════════════╝ 

還是這在其他情況下

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ Steve ║ 
╚═══════════╩═════════════╩═════════════╝ 

或者這在一行

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ Steve ║ (null) ║ 
╚═══════════╩═════════════╩═════════════╝ 

的情況下,如果沒有行,它應該是這樣的

╔═══════════╦═════════════╦═════════════╗ 
║ whatever ║ NAME1 ║  NAME2 ║ 
╠═══════════╬═════════════╬═════════════╣ 
║  ss ║ (null) ║ (null) ║ 
╚═══════════╩═════════════╩═════════════╝ 

我不想將人們與我失敗的問題混淆起來,並想到新的開始。我嘗試了多個基於row = 1或2返回val的子查詢,但因爲需要傳入數字而失敗,並且似乎多個子查詢不會接受來自外部超過2個級別的數字。也試圖使用樞軸,但無法讓我的頭,也沒有聚合函數在這裏,所以不知道我怎麼能在這裏使用它。

+0

您的輸入數據總是隻有一列和兩行?如果不是,總體要求是什麼?例如,如果有三行?還是100萬行? – mathguy

+0

是的,我的輸入數據總是有兩列和兩行或更少。 – Mocas

+0

我看到很多關於你想要什麼的描述,但沒有提到你實際嘗試過的東西。 – csmckelvey

回答

1

甲骨文設置

CREATE TABLE your_query (id, name) AS 
    SELECT 1, 'Steve' FROM DUAL UNION ALL 
    SELECT 1, 'Steve' FROM DUAL; 

查詢

SELECT 'ss' AS whatever, 
     name1, 
     name2 
FROM (
    SELECT name, 
     ROW_NUMBER() OVER (ORDER BY id, name) AS rn 
    FROM your_query 
) 
PIVOT (MAX(name) FOR rn IN (1 AS Name1, 2 AS Name2)); 

歐輸入

WHATEVER NAME1 NAME2 
-------- ----- ----- 
ss  Steve Steve 
+0

您的查詢按預期方式工作,並將值作爲兩列返回,但不幸的是我無法將參數從外部傳遞到我的查詢中,因爲我將所有查詢用作子查詢。好,但是 – Mocas

-1

對於您的情況下輸入總是包含兩行:

create table #mytable (number int, name varchar(50)) 
insert into #mytable values (1, 'Steve') 
insert into #mytable values (2, 'John') 

select 
    M1.number as 'whatever', 
    M1.name as 'Name1', 
    M2.name as 'Name2' 
from #mytable M1 
inner join #mytable M2 
on M1.number < M2.number