2014-04-17 50 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

相关问题