编写SQL进行检索,以便为提交维修的每个设备检索其序列号,描述,销售日期,请求维修的客户名称,维修说明以及维修费用。 (需要加入两个表)。
格式化输出,以便以如下句子形式输出:
“家电9001 DVD播放器的维修,于2018年1月1日出售给A.GREEN,以解决DVD Stuck问题将花费67.50欧元”。
如果不存在十进制值,请确保输出零。
不知道该用什么来格式化输出..搜索了dbms并打印,但是我不确定这是否是问题所在。提前谢谢!
客户表
CUSTID | CUSTNAME | CUSTPHONE | CUSTEMAIL
1001 Aaa 0123 GReen@mail.com
1002 BBB 0121 bbb@mail.com
1003 CCCC 0333 ccc@mail.com
appRepair表
serialNO | RepairDate| RepairDesc| repairCost | Customer_ID
9001 4-Mar-18 0123 67.5 1001
9002 4-JUN-18 0121 60.7 1002
9003 4-AUG-18 0333 102.5 1003
电器表
serialNO | appDESC | APPSALEDATE | GUARENTEELENGTH
9001 DVD PLAYER 1-jan-18 2
9002 FRIDGE FREEZER 3-may-18 5
9003 48 TV 5-jun-18 2
我用于选择查询的代码
select appliance.serialNo, appliance.appDesc, TO_CHAR(appliance.appSaleDate, 'DDTH MONTH YY') AS "SALE DATE",
UPPER(Customer.custName) AS "CUSTOMER NAME", Customer.custEmail from appliance
inner join appRepair ON appliance.serialNo=appRepair.serialNo
inner join Customer ON appRepair.customer_id=Customer.custID;
预期输出:
“家电9001 DVD播放器的维修,于2018年1月1日出售给A.GREEN,以解决DVD Stuck问题将花费67.50欧元。”
答案 0 :(得分:1)
您需要的是这样的
select 'The repair to appliance '
|| appliance.serialNo
|| ' ' || appliance.appDesc
|| ', sold on '
|| LTRIM(to_char(appliance.appSaleDate,'ddth Month YYYY','NLS_DATE_language=American'), 0)
|| ' to ' || UPPER(Customer.custName)
|| ', to solve the issue'
|| appRepair.RepairDesc || ' will cost '
|| ltrim(to_char(appRepair.repairCost, 'L9990.99'))
from appliance
inner join appRepair ON appliance.serialNo = appRepair.serialNo
inner join Customer ON appRepair.customer_id = Customer.custID;
这将解决日期格式:
select LTRIM(to_char(sysdate,'ddth Month YYYY','NLS_DATE_language=American'), 0)
from dual;
这将解决数字格式:
select to_char(00.00, 'L990.99')
from dual;
我没有您的桌子,但是如果出现任何错误,请告诉我,我将尽力提供帮助。这是DEMO的用法,因此您可以查看日期和数字格式的工作方式。
答案 1 :(得分:1)
您可以使用包含多个串联的查询:
select 'The repair to appliance '||a.serialNo||' '||a.appDesc||
', sold on '||to_char(a.appSaleDate, 'DDTH MONTH RRRR')||
' to '||upper(substr(c.custEmail,1,instr(c.custEmail,'@')-1))||
' to solve the issue '||substr(a.appDesc,1,instr(a.appDesc,' ')-1)||
' Stuck will cost '||
ltrim(to_char(repairCost, 'U999G999D00',
'NLS_NUMERIC_CHARACTERS = ''.,''NLS_DUAL_CURRENCY=EUR'))
as "Output"
from appliance a
join appRepair ar on a.serialNo=ar.serialNo
join customer c on ar.customer_id=c.custID;
如果您的NLS_CHARACTERSET
数据库参数为WE8ISO8859P1
,则可以用
Output
列的最后一部分
' Stuck will cost '||unistr('\20AC')||
ltrim(to_char(repairCost, '999G999D00',
'NLS_NUMERIC_CHARACTERS = ''.,'''))
能够看到欧元符号。
答案 2 :(得分:0)
您可以用concat()
/ ||
进行构造或替换。以下是示例:
select (case when count(*) <> 1
then 'There are ' || count(*) ' rows in the table'
else 'There is ' || count(*) ' row in the table'
end)
from t;
或者:
select replace(replace(replace('There [tobe] [cnt] row[plural] in the table'),
'[tobe]',
(case when count(*) = 1 then 'is' else 'are' end)
), '[cnt]', count(*)
), [plural], (case when count(*) = 1 then '' else 's' end)
end)
我将让您适应特定的数据。