【问题标题】:SQL Create dynamic columnSQL 创建动态列
【发布时间】:2014-10-07 23:52:11
【问题描述】:

我正在寻求一些帮助来构建 SQL 以获得某些结果。 下面是两张表。

表 1

Col1 | Col2 | Col3 | Col4 -------------------------------------- 测试PC01 | 2014 年 8 月 14 日 | ABCD | XYZ 测试PC02 | 2014 年 8 月 14 日 | EFGH | IJKL

表2

二氧化碳 | Col2 | Col3 | Col4 -------------------------------------- 测试PC01 | 2014 年 8 月 14 日 |耳鼻喉科 |文档

结果

二氧化碳 | Col2 | Col3 | Col4 | Col5 | Col6 -------------------------------------------------- ----- 测试PC01 | 2014 年 8 月 14 日 |耳鼻喉科 |文档 | ABCD |是 | 测试PC02 | 2014 年 8 月 14 日 | EFGH |空 |空 |否 |

只有当针对特定匹配 Table1.Col1 = Table2.Col1 在表 2 中填充了该特定 Col3 值的数据时才可以。
如果上述条件失败,则 NO

我可以使用简单的选择语句构建 SQL,但无法实现动态创建 col6。 谁能指导我如何实现这一目标?

【问题讨论】:

  • 您需要寻找CASE声明
  • 是的,我确实尝试过。但是如何为匹配值的特定值获取这个 using case 语句呢?我无法理解这一点。

标签: sql


【解决方案1】:

你想要一个带有条件表达式的left outer join

select t2.col1, t2.col2, t2.col3,
       (case when t1.col1 is not null then t2.col4 end) as col4
       t1.col3 as col5,
       (case when t1.col1 is null then 'Yes' else 'No' end) as col6
from table2 t2 left join
     table1 t1
     on t2.col1 = t1.col1 and t2.col2 = t1.col1;

我不清楚为什么在没有匹配的情况下col4 会是NULL。通常,您会保留第一个表中的所有值。但是,这就是您指定结果的方式。

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多