我在发布之前首先环顾四周,发现了很多像这样的问题但不是我想要的解决方案,这个问题不同......
我的任务是规范现有数据库,现在我在编写一个对现有数据库透明的视图时遇到困难,所以我写了这个......
SELECT
Customer.CustomerID, CustomerContact.CustomerContactID,
CustomerPhone.Phone AS "1",
CustomerPhone.Work AS "2",
CustomerPhone.Mobile AS "3",
CustomerPhone.Fax AS "4",
CustomerPhone.Other AS "5",
CustomerSpouse.Spouse AS "6",
CustomerSpouse.SpouseMobile AS "7"
FROM
[Customer]
INNER JOIN
CustomerContact ON Customer.CustomerID = CustomerContact.CustomerID
INNER JOIN
CustomerPhone ON CustomerContact.CustomerContactID = CustomerPhone.CustomerContactID
INNER JOIN
CustomerSpouse ON CustomerContact.CustomerContactID = CustomerSpouse.CustomerContactID
所以我在规范化方面犯了一个错误,在现有数据库中,CustomerPhone表看起来像这样
现在我不知道如何将所有列放入名为PhoneType
的新列中,并在名为PhoneNumber
的另一列中显示电话号码。
我宁愿不必回去改变我已经做过的表格,这是最后的手段。
我道歉,如果我解释它听起来有点令人困惑,如果确实如此,请告诉我,我会做一个编辑,并尝试更好地解释它。
由于
修改 这是表格的图表
以下是我使用我编写的查询返回的内容
因此,我需要将每个具有标题整数的列放在名为PhoneType的列中,并将其对应的电话号码放入名为PhoneNumber的列中。
我的查询需要做的就是让它返回。
PhoneType | PhoneNumber
1 | 123-4567
2 | 234-5678
3 | 345-6789
答案 0 :(得分:1)
我想你想要unpivot
(另见this question):
create table phones_wide (customerid int, "1" varchar(20), "2" varchar(20), "3" varchar(20), "4" varchar(20), "5" varchar(20), "6" varchar(20), "7" varchar(20));
insert into phones_wide values (1234, '123-4342', '223-4342', '323-4342', '423-4342', '523-4342', '623-4342', '723-4342')
select PhoneType, PhoneNumber
from phones_wide
unpivot
(
PhoneNumber
for PhoneType in ("1","2","3","4","5","6","7")
) u;
drop table phones_wide
输出:
PhoneType PhoneNumber
1 123-4342
2 223-4342
3 323-4342
4 423-4342
5 523-4342
6 623-4342
7 723-4342