将数据从列转换为行,仅当列的联合不为null时才使用where子句检查是否为null并选择!=''

时间:2018-07-11 20:22:15

标签: sql

我需要选择查询来仅选择电话列是否不为空。

我在CRM中有一条电话记录,其中电话号码分为三列。 ERP的电话记录只有一列,因此它需要每种电话类型的记录:工作,家庭电话。我想将记录从CRM导入到ERP。用于插入查询的select语句有效,但是当电话号码为null时,它将插入一个包含空电话号码的记录。我仅在填充电话号码时才需要插入记录。下面列出了查询的示例,在from语句的子查询中包含测试数据。

SQL Server 2008 R2

SELECT
    ID,
    Label,
    PHONE
FROM
    (SELECT 
         90864 AS ID, 'HOME' AS LABEL, '9185410013' AS PHONE
     UNION 
     SELECT 
         90864 AS ID, 'WORK' AS LABEL, '' AS PHONE
     UNION 
     SELECT 
         90864 AS ID, 'CELL' AS LABEL, '' AS PHONE
    ) AS Test_Data

2 个答案:

答案 0 :(得分:1)

显式版本(更新,添加了一些空值只是为了显示每个描述在此处的作用)

SELECT
    ID,
    Label,
    PHONE
FROM
(        
SELECT 90864 AS ID, 'HOME' AS LABEL, '9185410013' AS PHONE
UNION 
SELECT 90864 AS ID, 'WORK' AS LABEL, '' AS PHONE
UNION 
SELECT 90864 AS ID, 'CELL' AS LABEL, '' AS PHONE
UNION
SELECT 90865 AS ID, 'HOME' AS LABEL, '9185410013' AS PHONE
UNION 
SELECT 90865 AS ID, 'WORK' AS LABEL, null AS PHONE
UNION 
SELECT 90865 AS ID, 'CELL' AS LABEL, null AS PHONE
) as Test_Data
WHERE PHONE is not null AND PHONE != ''

结果:

ID  Label   PHONE
90864   HOME    9185410013
90865   HOME    9185410013

答案 1 :(得分:0)

SELECT
    ID,
    Label,
    PHONE
FROM TABLE
WHERE DATALENGTH(PHONE) > 0