我有桌面客户,其中包含电话号码和电话号码类型。电话号码类型包括家庭,工作和移动的H,W,M。我需要的是列出根据手机类型显示电话号码的记录。例 如果customer1有两个电话记录,我想得到如下列表:
customer PhoneH phoneW PhoneM
ABC 123 None 232
以下是Cust_tbl
中的列:
CustomerId, CustomerName, Phone, PhoneType
答案 0 :(得分:0)
根据数据库的不同,有不同的解决方案。例如,在Access中的透视是不同的,那么让我们说Oracle。还有一些缺少要求
那说这将产生我们从大多数数据库的问题中得知的输出。
它使用内联视图c
创建“唯一”客户列表。然后为每种类型连接3次到cust_tbl。
SELECT C.customername customer,
h.phone AS PhoneH,
w.phone AS phoneW,
m.phone AS PhoneM
FROM (SELECT DISTINCT customerid,
customername
FROM cust_tbl) AS c
LEFT JOIN cust_tbl h
ON c.customerid = h.customerid
AND h.phonetype = 'H'
LEFT JOIN cust_tbl w
ON c.customerid = w.customerid
AND w.phonetype = 'W'
LEFT JOIN cust_tbl m
ON c.customerid = m.customerid
AND m.phonetype = 'M'
这不会解决#1问题,#2模糊不清,对#3和#4来说有点混乱
看看凌乱的意思,看看当你得到one bad row here
时会发生什么答案 1 :(得分:0)
SQL小提琴:http://sqlfiddle.com/#!3/d41d8/41007
declare @cust_tbl table
(
CustomerId bigint not null
,CustomerName nvarchar(16) not null
,Phone nvarchar(32) not null
,PhoneType nchar(1) check(PhoneType in ('H','M','W'))
)
insert @cust_tbl
select 1, 'ABC', '123','H'
union select 1, 'ABC', '232','M'
union select 2, 'XXX', '987','W'
select CustomerName Customer
, coalesce([H],'none') PhoneH
, coalesce([W],'none') PhoneW
, coalesce([M],'none') PhoneM
from @cust_tbl
pivot (
max(Phone) for phonetype in ([H],[W],[M])
) pvt
order by Customer