【问题标题】:How to remove null value form multiple column in sql select statement result set如何在sql select语句结果集中从多列中删除空值
【发布时间】:2014-12-26 15:10:12
【问题描述】:

如何在sql查询中实现结果集

【问题讨论】:

  • 我们需要查看查询...但是 max 和 group by 似乎可以做到;前提是有一种方法可以将行相互关联。但是,以这种方式生成数据的基本查询更有可能出现问题。我们能看到用来获取这个的 SQL 吗?
  • 这个结果集来自多个联合查询,每个联合查询都给出单独的列结果集,所以对于剩余的列是每个联合查询我添加空值作为一列,然后最后我得到结果集是这样的。
  • 那么除了顺序之外,不同的工会有什么关系呢?他们有共同的领域吗?还是我可以假设他们在联盟中返回的顺序是他们需要链接的顺序?这里的问题是没有足够的信息来解决这个问题,除非我们做出很多假设。
  • @user3068880 请分享您尝试实现的查询,我无法回答
  • select a1.col1,a1.col2,a1.col3,a1.col4 from (select 1 as col1 col2,null col3,null as col4 from table1 t1 where col2 = 'A1' union select 2 as col1, col2,null col3,null as col4 from table t1 where col2 = 'A1' union select 3 as col1, col2, null col3,null as col4 form table t1 where col2 = 'A1')a1 union select a2.col1 ,a2.col2,a2.col3,a2.col4 from (select null col1,null as col2,1 as col3 col4 from table1 t1 where col3 = 'A2' union select null col1,null as col2,2 as col3 col4 from table t1 where col3 = 'A2' union select null col1,null as col2,3 as col3 col4 form table t1 where col3 = 'A2')a2

标签: oracle11g oracle10g


【解决方案1】:

你可以一起工作

WITH
T1 AS (
  SELECT
    val,
    ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY id) rn
  FROM Table1
),
T2 AS (
  SELECT
    val,
    ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY id) rn
  FROM Table2
),
T3 AS (
  SELECT
    val,
    ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY id) rn
  FROM Table3
)
SELECT
  T1.val column1
  , T2.val column2
  , T3.val column3
FROM T1
JOIN T2
  ON T1.rn = T2.rn
JOIN T3
  ON T2.rn = T3.rn
ORDER BY T1.rn
;

你需要

  • 将现在进入UNION 的语句放入“T1”到“T3”中,然后
  • 将您当前的排序顺序分别移至ROW_NUMBER 分析函数。

……应该完成:SQL Fiddle

如果需要更多详细信息,请发表评论。

【讨论】:

  • 嗨,Abecee,这是我一直在寻找的 xact 解决方案..很久以前我使用过这种语法,但我忘记了..你拯救了我的一天..非常感谢
  • 我只希望每个表中的顺序是正确的。否则你会错误地加入数据。
  • @xQbert:如果原始子查询确实以正确的顺序返回数据 - 为什么这不再适用于移动到分析函数的排序顺序的排序顺序?
  • @abecee 什么 orderby 应用于原始联合,以便 A1 在第 1 行,b1 在第 1 行,C1 在第 1 行?没有对吗?由于没有明确定义顺序,随着时间的推移,随着新数据的添加和旧数据的清除,每个集合可能会以不同的顺序返回。这意味着随着时间的推移,A1 B2 和 C3 将来可能都出现在同一行上。这个答案本质上依赖于子查询的顺序在返回时总是与现在相同。没有order by,db引擎返回的order不能保证!
  • sqlfiddle.com/#!4/481f86/1/0 是我的意思.. 我们怎么知道 ID 是什么驱动 A1 与 A2 以及 A2 与 A3 一起使用?但由于答案已被接受并没有实际意义。
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 1970-01-01
相关资源
最近更新 更多