SQL - код ошибки "блок запроса имеет неправильное количество столбцов результата" - PullRequest
0 голосов
/ 06 ноября 2019

Я стараюсь составить расписание всех встреч на март и апрель 2030 года по курсу «ху». У меня есть некоторые проблемы с этим. Мой 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 3010 00

Вот почему я хочу объединить их.

Ответы [ 3 ]

1 голос
/ 06 ноября 2019

Первый SELECT имеет 5 столбцов, а другие SELECT имеют один столбец для UNION. UNION должен иметь UNIque количество столбцов в 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
1 голос
/ 06 ноября 2019

Первое предложение SELECT возвращает несколько столбцов, в то время как последующие два возвращают один столбец. Оператор UNION требует, чтобы во всех результирующих наборах было одинаковое количество столбцов.

(я подозреваю, что вам вообще не нужен UNION, хотя неясно, чего вы пытаетесь достичь.)

0 голосов
/ 06 ноября 2019

Похоже, что вы пытаетесь вычислить BIS и VON раз и включить их в каждую строку. В этом случае вам не нужно использовать 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')

Я также показал, как использовать псевдонимы таблиц (a и l) чтобы упростить код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...