【问题标题】:SQL - Error Code "query block has incorrect number of result columns"SQL - 错误代码“查询块的结果列数不正确”
【发布时间】:2019-11-06 13:15:49
【问题描述】:

我尝试为 2030 年 3 月和 2030 年 4 月的所有约会制定时间表 当然“xy”。我在开始这个过程中遇到了一些问题。到目前为止,我的 SQL 代码是

SELECT  abhaltung.persnr  , abhaltung.raum_id , abhaltung.tag , abhaltung.lvanr, LVA.name  
from abhaltung, lva 
WHERE ((abhaltung.tag BETWEEN TO_DATE  ('2030/03/01','yyyy/mm/dd')AND TO_DATE('2030/04/30','yyyy/mm/dd'))
AND lva.name like 'xy')
UNION
SELECT abhaltung.to_hour|| ' : '|| abhaltung.to_minute as "BIS" from abhaltung
UNION
SELECT abhaltung.from_hour|| ' : '|| abhaltung.from_minute as "VON" from abhaltung

我遇到了我收到的问题 " 01789. 00000 - "查询块的结果列数不正确""

我知道可能是重命名广告的列太多,但我无法以某种方式解决此问题

已编辑(重命名并进一步澄清)

我的输出应该是这样的

从到 10:15 11:00 09:30 10:00

但是,时间戳分钟和小时在单独的选项卡中 它们看起来像那样

from_hour from_minute to_hour to_minute 10 15 11 00 09 30 10 00

这就是我想要合并它们的原因。

【问题讨论】:

  • @Gordon 做到了,只是被错误的格式隐藏了。我修好了

标签: sql oracle concatenation union


【解决方案1】:

您的第一个 SELECT 子句返回多个列,而随后的两个每个返回一个列。 UNION 运算符要求所有结果集具有相同的列数。

(我怀疑你根本不想要一个 UNION,虽然不清楚你想要完成什么。)

【讨论】:

  • 您好,谢谢您的回答。对不起,全名都是德语我会在一分钟内编辑我的输出应该看起来像从 10:15 11:00 09:30 10:00 但是,时间戳分钟和小时在单独的选项卡中,它们看起来像这样from_hour from_minute to_hour to_minute 10 15 11 00 09 30 10 00 这就是我想合并它们的原因。
【解决方案2】:

第一个SELECT 有5 列,其他SELECT 有一个UNION 列。 UNION 在SELECT 中的列数必须是唯一的。

SELECT  abhaltung.persnr  || abhaltung.raum_id || abhaltung.tag || abhaltung.lvanr || LVA.name  
FROM abhaltung, lva 
WHERE ((abhaltung.tag BETWEEN TO_DATE  ('2030/03/01','yyyy/mm/dd')AND TO_DATE('2030/04/30','yyyy/mm/dd'))
AND lva.name like 'xy')
UNION
SELECT abhaltung.bis_stunde|| ' : '|| abhaltung.bis_minute as "BIS" from abhaltung
UNION
SELECT abhaltung.von_stunde|| ' : '|| abhaltung.von_minute as "VON" from abhaltung

【讨论】:

  • 所以我还必须将另一列添加到这一列吗?
  • 是的,你必须添加相等的列
【解决方案3】:

看来您要做的是计算 BISVON 时间并将它们包含在每一行中。在这种情况下,您不需要使用 UNION,只需将计算添加到您的 SELECT:

SELECT  a.persnr,
        a.raum_id,
        a.tag,
        a.lvanr,
        l.name,
        a.to_hour   || ' : '|| a.to_minute as BIS,
        a.from_hour || ' : '|| a.from_minute as VON
from abhaltung a,
     lva l
WHERE a.tag BETWEEN TO_DATE('2030/03/01', 'yyyy/mm/dd')
                AND TO_DATE('2030/04/30', 'yyyy/mm/dd') AND
      l.name like 'xy')

我还展示了如何使用表别名(al)来帮助简化代码。

【讨论】:

  • 谢谢,我解决了类似的问题。主要问题是 UNION 也感谢“Vignesh Kumar A”。
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
相关资源
最近更新 更多