SQL,Oracle,列格式化

时间:2014-04-18 12:30:50

标签: sql oracle formatting

Oracle / SQL新手在这里请轻松一点,但需要一些帮助,我的设置中有'quirk'。作为练习,我正在创建一个公司/联系人/ contactdetails数据库:

  • 总共9张表
  • 公司可以是供应商,客户或两者兼有
  • 公司可以有很多或没有地址(账单/交付等)
  • 公司可以有很多或没有联系人姓名
  • 联系人可以有很多或没有电子邮件地址,很多或没有不同类型的电话号码(DDI,手机,传真等)

作为我的第一次尝试,代码很可能不复杂,优雅,高效或强大,但它现在似乎有用,我很享受学习曲线。

所以我可以检查正确的工作我已经创建了一个包含完整外部表连接,别名,列格式和中断的select语句,以生成一个报告,看起来像下面的链接。

BREAK on c1 on c2 on c3 on c4 on c5 on c6 on c7 on c8 on c9 on c10 COLUMN c1 HEADING ACCT FORMAT A6 COLUMN c2 HEADING COTY FORMAT A4 COLUMN c3 HEADING "COMPANY NAME" FORMAT A35 COLUMN c4 HEADING CITY FORMAT A15 COLUMN c5 HEADING POSTCODE FORMAT A10 COLUMN c6 HEADING FIRSTNAME FORMAT A10 COLUMN c7 HEADING SURNAME FORMAT A10 COLUMN c8 HEADING EMAIL FORMAT A39 COLUMN c9 HEADING TYPE FORMAT A8 COLUMN c10 HEADING NUMBER FORMAT A20 SELECT cp.code c1, cp.type c2, cp.name c3, ad.city c4, ad.postcode c5, ct.firstname c6, ct.surname c7, em.emailaddress c8, pt.type c9, ph.phoneno c10 FROM company cp FULL OUTER JOIN companyaddress cpad ON cp.companyid=cpad.companyid FULL OUTER JOIN address ad ON cpad.addressid=ad.addressid FULL OUTER JOIN contact ct ON cp.companyid=ct.companyid FULL OUTER JOIN email em ON ct.contactid=em.contactid FULL OUTER JOIN phone ph ON ct.contactid=ph.contactid FULL OUTER JOIN phonetype pt ON ph.phonetypeid=pt.phonetypeid ORDER BY cp.code, cp.type, cp.name, ad.city, ad.postcode, ct.firstname, ct.surname, em.emailaddress, pt.type, ph.phoneno;

Link to Output image

2个问题:

  1. 注意TYPE列。这显示了电话号码的类型。我无法理解的是为什么有时候列向左缩进并爬进EMAIL列的格式化空间。更重要的是,这似乎不一致。我确定这是一个格式化问题,我已经尝试从连接表中返回更多/更少的列,并以列格式分配列大小。这些变化有时会导致正确的列格式,但我找不到任何隔离问题的一致性。

  2. 如果联系人有两个电子邮件地址但只有一种电话类型,则会列出两次电话详细信息。请联系Dave Michaels for CompanyE Ltd。

  3. 我尝试将功能减少到几个表和几行代码。我希望这可以隔离问题或限制我可能需要发布的代码行,但没有快乐。我可以为表创建,数据插入提供架构图和脚本,并选择任何愿意帮助我的人。我将非常感激。

1 个答案:

答案 0 :(得分:0)

Alex Poole回答

SET TAB OFF