sql - 将数据从列转换为行,仅当列的并集不为空时才选择,使用 where 子句检查不为空和 != ''
问题描述
我需要选择查询仅在电话列不为空时进行选择。
我在 CRM 中有一条电话记录,其中三列中有电话号码。ERP 有一个包含一列的电话记录,因此它需要记录每种电话类型:工作、家庭手机。我想将记录从 CRM 导入到 ERP。插入查询的 select 语句有效,但是当电话号码为空时,它会插入一条电话号码为空的记录。我需要它仅在填充电话号码时插入记录。下面列出了一个查询示例,其中包含 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
解决方案
显式版本(更新,添加了一些空值只是为了显示它在每个描述中有效)
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
推荐阅读
- node.js - 如何处理 Mongoose 文档版本错误
- r - 冗余基因列表简化
- java - 双击退出应用程序
- python - Pandas 相对时间轴
- events - 如何捕获 Datawindow 移动事件?
- directx - DX11VideoRenderer 中的 ProcessFrameUsingD3D11() 与 ProcessFrameUsingXVP()?
- docker - 如何使用 Docker Swarm Mode 在容器之间共享数据?
- python - 复制文本文件内容并将其粘贴到另一个
- javascript - 在回调函数中访问数据
- javascript - javascript Window.onscroll 垂直移动 div