基于其他列在 Sql Server 中创建新列

萨彦坦慕克吉

我有一张桌子 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何基于其他列创建列SQL Server 2012

sql基于其他列中的多个值进行计数-SQL Server Management Studio

如何基于SQL中的其他列创建列?

如何基于SQL Server中的其他列组获取行数

SQL返回基于其他列的列

Oracle sql - 基于其他列的查询

如何编写此SQL Server语法以基于同一表中其他2个列的值更新列

SQL Server 2000-基于其他3列的值从4列表返回单个列值

SQL:基于重复观察的数据集中其他两个列的条件创建新列

SQL Server CTE 中基于日期的其他 ID 的总和

如何根据sql server中其他列中的值插入新行?

基于列值的其他表中的SQL SELECT数据

基于其他列的SQL自定义列

基于列值的 SQL Server 查询问题将结果填充到其他列中。我们可以添加日期

熊猫,基于多行中的其他列创建新列

基于主键从其他列中的数据创建新列

SQL Server 2008中基于计算列的新行

SQL函数显示基于其他列的值

SQL查询以基于其他列获取客户

基于其他列条件的SQL平均计算

SQL根据其他两列创建新列

仅当其他列值不同时,SQL SERVER UNIQUE

SQL SELECT:具有基于其他列的值的新列

连接并比较两列与 SQL Server 2008 中其他表中的列?

在BigQuery Standard SQL中基于其他列填充列的空白

需要基于其他列值的SQL结果中的列值

SQL Server:根据其他2列中的条件更新boolean列

根据 SQL Server 中其他列的值在列内进行划分

根据 SQL Server 中的其他列值推断一列的值