2014-04-17 47 views
0

也許這個問題有點含糊。我想創建一個視圖或有一個查詢更改此 - >如何通過分組多個列來創建視圖?

012878  123456 Mike        12345678 Saving     1234.52 
012878  123456 Mike        22345678 credit     -1534.52 
012878  123456 Mike        32345678 Home loan   -453234.52 
012878  123458 Jean        110SAVING     3213.54 
012878  123458 Jean        210Credit     -120.34 
012878  123458 Jean        310Personal loan   -63121.23 

對此---->

012878  123456 Mike   12345678 Saving     1234.52 
            22345678 credit     -1534.52 
            32345678 Home loan   -453234.52 
    012878  123458 Jean   110SAVING     3213.54 
            210Credit     -120.34 
            310Personal loan   -63121.23 

我有兩個表:

SQL> CREATE TABLE Account (
    2   BSB#   CHAR(6)   NOT NULL, /* Bank BSB number */ 
    3   Customer#  NUMBER(10)  NOT NULL, /* Customer number */ 
    4   Account#  NUMBER(10)  NOT NULL, /* Account number  */ 
    5   Type   VARCHAR2(20) NOT NULL, /* Account type  */ 
    6   Balance   NUMBER(10,2) NOT NULL, /* Account balance */ 
    7   CONSTRAINT WorksOn_PK PRIMARY KEY(BSB#, Account#), 
    8   CONSTRAINT WorksOn_FK1 FOREIGN KEY(BSB#, Customer#) REFERENCES Customer(BSB#, Customer#) 
    9 ) 


SQL> CREATE TABLE Customer (
    2   BSB#   CHAR(6)   NOT NULL, /* Bank BSB number */ 
    3   Customer#  NUMBER(10)  NOT NULL, /* Customer number */ 
    4   Name   VARCHAR2(30) NOT NULL, /* Customer name  */ 
    5   DOB    Date,      /* Date of birth  */ 
    6   Sex    CHAR,      /* M-Male, F-Female */ 
    7   Address   VARCHAR2(50) NOT NULL, /* Customer address */ 
    8   Phone#   VARCHAR2(15),    /* Phone number  */ 
    9   CONSTRAINT Project_PK PRIMARY KEY(BSB#, Customer#), 
10   CONSTRAINT Project_FK FOREIGN KEY (BSB#) REFERENCES Bank(BSB#) 
11 ); 

而且以產生第一視圖我用這個 - >

create view view_1 AS 
select 
a.bsb#, a.customer#, c.name, a.account#, a.type, a.balance 
from 
account a, customer c 
where 
c.customer# = a.customer# and c.bsb# = a.bsb# 

現在我娃nt按bsb#,賬號和名稱對它進行分組。換句話說,我想消除行並將它們更改爲空格或空值。

+0

你的語法顯然是Oracle的話我刪除了mysql和sql-server標籤。 –

+3

這通常是在應用程序層完成的數據操作類型,而不是視圖。請記住,表和結果集本質上是無序的,所以如果數據應該從另一行中算出來,那麼在列中有一個空值或NULL值是一個壞主意。 –

+1

你正在做的是格式化。在關係數據模型中,表或視圖中的每行都必須獨立運行。 – dasblinkenlight

回答

1

如果您在報告中需要此功能,請嘗試搜索羣組功能,並將某些字段放在羣組標題中,並將其他列放入羣組詳細信息中。

+0

你能多解釋一下嗎?我完全需要它的報告。你能告訴我一個簡單的例子嗎 – Bernard

+0

你使用的是什麼類型的報告工具? –

1

你可以用這個例子作爲模板,並把自己的列/查詢的數據,而不是表T來源:

SQL> With t (a, b, c, d, e, f) as (
    2 select '012878',123456,'Mike',12345678,'Saving', 1234.52 from dual union all 
    3 select '012878',123456,'Mike',22345678,'credit',-1534.52 from dual union all 
    4 select '012878',123456,'Mike',32345678,'Home loan', -453234.52 from dual union all 
    5 select '012878',123458,'Jean',110,'SAVING', 3213.54 from dual union all 
    6 select '012878',123458,'Jean',210,'Credit', -120.34 from dual union all 
    7 select '012878',123458,'Jean',310,'Personal loan', -63121.23 from dual 
    8 ) 
    9 select decode(rn,1,a,null) a, decode(rn,1,b,null) b, decode(rn,1,c,null) c, 
10 d,e,f 
11 from (
12 select t.*, row_number() over(partition by a,b,c order by d) rn 
13 from t 
14 ) x 
15 order by x.a, x.b, x.c, x.d 
16/

A    B C    D E      F      
------ ---------- ---- ---------- ------------- ----------      
012878  123456 Mike 12345678 Saving   1234,52      
         22345678 credit   -1534,52      
         32345678 Home loan  -453234,52      
012878  123458 Jean 110SAVING   3213,54      
         210Credit   -120,34      
         310Personal loan -63121,23  
+0

感謝您的努力,但如前所述,這是操作類型在數據庫層沒有解決。 – user3104183

0

我終於通過格式化的SQL工具以及解決這個問題。正如我在我的問題說,創建一個視圖或查詢,因爲我需要這個在sqlplus命令行報告:

create view view_4(BSB#, CUSTOMER#, NAME, ACCOUNT, TYPE, BALANCE) AS (
select 
a.bsb#, a.customer#, c.name, a.account#, a.type, a.balance 
from 
account a 
RIGHT OUTER JOIN customer c 
ON 
c.customer# = a.customer# and c.bsb# = a.bsb#) 


BREAK ON BSB# ON CUSTOMER# ON NAME 


SELECT BSB#, CUSTOMER#, NAME, TYPE 
    FROM VIEW_3 
    ORDER BY CUSTOMER#;​ 

而現在的結果是正是我想要的......

+0

雖然您不需要查看視圖,但您可以直接在其下運行查詢 - SQL * Plus格式仍將應用。如果你們需要在一起,那麼你可以把它們放在一個腳本中運行。 –

+0

我仍然有這個問題。它會刪除第二個客戶的bsb號碼! – Bernard

相關問題