2017-05-14 9 views
0

Für zB zu entfernen., Gibt Meine Tabelle unten Werte,In Oracle SQL, ich möchte Club Reihen von null Spalten

| AppID | Sales   | Salaries  | Bills | 
    +-------+-----------------+--------------+----------+ 
    | 7  |54    | Null   | Null | 
    | 7  |Null    | 66   | Null | 
    | 7  |Null    | Null   | 88  | 
    | 8  |Null    | 7654   | Null  | 
    | 8  |Null    | Null   | 72  | 
    | 8  |Null    | Null   | 78  | 

Wie bekomme ich das Ergebnis als()

| AppID | Sales   | Salaries  | Bills | 
    +-------+-----------------+-------------+----------+ 
    | 7  |54    | 66   | 88  | 
    | 8  |Null   | 7654   | 72  | 
    | 8  |Null   | Null   | 78  | 

--Added doppelte Werte für Appid 8 ?

Warten auf Antwort.

Antwort

1

Sie könnten Aggregation dafür verwenden.

Max:

select appId, 
    max(sales) as sales, 
    max(Salaries) as salaries, 
    max(Bills) as bills 
from your_table 
group by appId; 

oder Sum:

select appId, 
    sum(sales) as sales, 
    sum(Salaries) as salaries, 
    sum(Bills) as bills 
from your_table 
group by appId; 
+0

Danke für die schnelle Antwort. Aber wenn ich mehrere Werte wie – user3207875

+0

@ user3207875 habe - Was willst du in diesem Fall tun? – GurV

+0

Eingabe | AppID | Verkauf | Gehälter | Rechnungen | + ------- + ----------------- + -------------- + ------- --- + | 7 | 54 | Null | Null | | 7 | Null | 66 | Null | | 7 | Null | Null | 88 | | 8 | Null | 7654 | Null | | 8 | Null | Null | 72 | | 8 | Null | Null | 78 | – user3207875

0

Oracle-Setup:

CREATE TABLE my_table(AppID, Sales, Salaries, Bills) AS 
    SELECT 7, 54, NULL, NULL FROM DUAL UNION ALL 
    SELECT 7, NULL, 66, NULL FROM DUAL UNION ALL 
    SELECT 7, NULL, NULL, 88 FROM DUAL UNION ALL 
    SELECT 8, NULL, 7654, NULL FROM DUAL UNION ALL 
    SELECT 8, NULL, NULL, 72 FROM DUAL UNION ALL 
    SELECT 8, NULL, NULL, 78 FROM DUAL; 

Abfrage:

SELECT AppId, 
     Sales, 
     Salaries, 
     Bills 
FROM (
    SELECT t.*, 
     ROW_NUMBER() OVER (PARTITION BY AppId, Column_Name ORDER BY ROWNUM) rn 
    FROM my_table 
    UNPIVOT (value FOR column_name IN (Sales, Salaries, Bills)) t 
) 
PIVOT 
(
    MAX(value) 
    FOR column_name IN (
    'SALES' AS sales, 'SALARIES' AS salaries, 'BILLS' AS bills 
    ) 
) 
ORDER BY AppId, rn; 

Ausgang:

APPID SALES SALARIES BILLS 
----- ----- -------- ----- 
    7 54  66 88 
    8   7654 72 
    8     78