我有一张桌子 T :
CREATE TABLE T
(
id INT,
type VARCHAR(200),
type_value VARCHAR(10),
value VARCHAR(200)
);
INSERT INTO T VALUES (1, 'HomePhone', 'p1', '1234 ');
INSERT INTO T VALUES (1, 'HomePhone', 'p2', '5678 ');
INSERT INTO T VALUES (1, 'HomePhone', 'p3', '4567');
INSERT INTO T VALUES (1, 'WorkPhone', 'w1', '9007 ');
INSERT INTO T VALUES (2, 'Email', 'e1', '[email protected] ');
INSERT INTO T VALUES (2, 'Email', 'e1', '[email protected]');
INSERT INTO T VALUES (2, 'Email', 'e2', '[email protected]');
INSERT INTO T VALUES (3, 'WorkPhone', 'w1', '0100');
INSERT INTO T VALUES (3, 'WorkPhone', 'w2', '0110');
INSERT INTO T VALUES (4, 'OtherPhone', 'o1', '1010 ');
INSERT INTO T VALUES (4, 'OtherPhone', 'o1', '1110 ');
INSERT INTO T VALUES (4, 'OtherPhone', 'o1', '1011');
INSERT INTO T VALUES (4, 'HomePhone', 'p1', '2567 ');
我需要将其转换为:
id primaryhomephone secondaryhomephone primaryemail secondaryemail Primaryworkphone secondaryworkphone primaryotherphone secondaryotherphone
----------------------------------------------------------------------------------------------------------------------------------------------------------------
1 1234 5678 null null 9007 null null null
2 null null [email protected] [email protected] null null null null
3 null null null null 0100 0110 null null
4 2567 null null null null null 1010 1011
基本上该字段将根据 type_value 进行划分。如果相同的 id 和类型有两个 type_value,那么第一个类型将是主要的,第二个类型将是次要的。
对于相同 id 和类型的两个以上类型值,丢弃第三个。
对于 id 4 的两个以上相同类型的类型值(例如 o1,o1),第一个 o1 将是主要的其他音素,第二个将是次要的主要音素。
对不起,如果这个问题之前已经重复过,但不知何故我无法解决它。任何人都可以请帮忙。
非常感谢
您需要照顾SQL Server 中的计算列。
CREATE TABLE [dbo].T
(
...
[primaryhomephone] AS (CASE WHEN type_value = 'p1' THEN value ELSE NULL END)
)
或者,您可以使用视图:
CREATE VIEW dbo.vwT
AS
SELECT
id
,(CASE WHEN type_value = 'p1' THEN value ELSE NULL END as [primaryhomephone]
, (CASE WHEN type_value = 'p2' THEN value ELSE NULL END as [secondaryhomephone]
FROM dbo.T
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句