sql - 如何使用一个表作为其他表的过滤器并在 sql 中生成一个新表

标签 sql sql-server sqldatatypes

假设我有一个表需要用作过滤表(表 A),而另一个表则从链接服务器(表 b)读取数据。过滤的结果将生成第三个表,问题是我无法弄清楚如何正确应用此过滤。我从这个链接找到了引用:Reference 但它没有载入我正在寻找的东西。 见下图:

表 A - 列中的数据类型为 Bit

|Field1 |Field2 |Field3 |Field4 |CustomerCode| |------|--------|--------|--------|------------| | 1 | 0 | 0 | 1 | c001 |

表 B - 列中的数据类型为 varchar

|FieldA |FieldB |FieldC |FieldD |CustomerCode | |------ |--------|--------|--------|------------| |啊啊啊 |空 | ccccc |dddd | c001 |

那么我要找的是这样的:

IF tableA.Field1 = 1 THEN NOT EMPTY tableB.FieldA 执行 INSERT INTO tableC FieldI VALUES(tableB.FieldA) ELSE INSERT INTO tableC FieldI VALUES('未找到值')

所以这将确保表 A 中的所有字段都等于 1, 然后对于表 B 数据不能为 null,如果数据为 null 则插入该消息:'No Value Found';如果数据不为空,则只需将表 B 中的数据放入该表 C。 我从 SQL 开始,但大多数时候我遗漏了一些可以更容易理解这个问题的东西。

谢谢

最佳答案

使用 INSERT INTO table ... SELECT FROM。像这样的东西应该可以工作:

INSERT INTO tableC
SELECT COALESCE(t1.FieldA, 'No Value Found'),
       COALESCE(t1.FieldB, 'No Value Found'),
       COALESCE(t1.FieldC, 'No Value Found'),
       COALESCE(t1.FieldD, 'No Value Found')
FROM TableB t1
INNER JOIN TableA t2
    ON t1.CustomerCode = t2.CustomerCode
WHERE t2.Field1 = 1 AND
      t2.Field2 = 1 AND
      t2.Field3 = 1 AND
      t2.Field4 = 1

关于sql - 如何使用一个表作为其他表的过滤器并在 sql 中生成一个新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41887445/

相关文章:

mysql - 在选择查询中获取选定字段的替代方法

java - 此版本的 sql server 不支持对数据库和/或服务器名称的引用

sql - 就sql中的内连接和where子句而言,什么更有效

sql-server - ssis unicode 平面文件由脚本组件处理

SQL Server 2005 - 达到表行大小限制

mysql - 将数据类型从 FLOAT 更改为 DECIMAL。不可预见的问题?

mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?

SQL在LIKE子句中选取连续两个空格的字符串

sql - 当 JOIN 列在两个表中具有相同名称时,T-SQL 语法缩写?

带日期的 SQL 表