Группа отсутствующих предложений от DBF FoxPro - PullRequest
0 голосов
/ 09 мая 2018

У меня есть этот запрос в C #, и я попытался добавить group by для всех неагрегированных значений, но он не работает.

У меня есть 3 таблицы:

  1. Первая таблица у меня assemblyno, part_no, rout_no (уникально), wo_no и т. Д. *
  2. На втором у меня есть wo_no (то же из таблицы 1) и job_no, это таблица «ссылок» между 1 и 3
  3. И третья таблица job_no (аналогично второй таблице) с order_val

Необходимо извлечь для данной rout_no в 1-й таблице max(order_val) в третьей таблице, используя вторую таблицу, которая свяжет wo_no и job_no ...
Надеюсь понятнее.

Ошибка:

Дополнительная информация: предложение SQL: GROUP BY отсутствует или недействительно.

        sql = string.Format(@" SELECT t1.assemblyno, t1.level, t1.wo_no, t1.rout_no, t1.due_date, t1.printed, t1.rev_no, t2.lot, t2.po, t2.qty_due, t3.comment, t3.jobno, MAX(t3.order_val), t3.part_no,t3.po,t3.price, t3.qty_order, t3.quote_no, t3.rev_no 
    FROM ('{0}') t1 
    LEFT JOIN ('{1}') t2 
    on t1.wo_no = 2.wo_no 
    LEFT JOIN ('{2}') t3 
    on t2.jobno = t3.jobno 
    GROUP BY  t1.assemblyno, t1.level, t1.wo_no, t1.rout_no, t1.due_date, t1.printed, t1.rev_no, t2.lot, t2.po, t2.qty_due, t3.comment, t3.jobno,t3.part_no,t3.po,t3.price, t3.qty_order, t3.quote_no, t3.rev_no 
WHERE t1.rout_no=" + "\'" + rNum + "\'" + ";", databaseTable_WOROUTH, databaseTable_WOJOBS, databaseTable_SOMAST);

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Похоже, вы не собираетесь делиться своими структурами и дополнительной информацией. Основываясь только на том, что у нас есть, вероятно, это то, что вы ищете:

    sql = string.Format(@" SELECT 
        t1.assemblyno, t1.level, t1.wo_no, t1.rout_no, 
        t1.due_date, t1.printed, t1.rev_no, t2.lot, t2.po, t2.qty_due, 
        t3.comment, t3.jobno, MAX(t3.order_val), t3.part_no,t3.po,t3.price, t3.qty_order,
        t3.quote_no, t3.rev_no 
        FROM ('{0}') t1 
        LEFT JOIN ('{1}') t2  on t1.wo_no = 2.wo_no 
        LEFT JOIN (
    select * from ('{2}') tmp1
    inner join  
    (select jobNo, max(order_val) as order_val from ('{2}') group by jobNo) tmp2
    on tmp1.JobNo = tmp2.JobNo and tmp1.Order_Val=tmp2.Order_val
        ) t3 
        on t2.jobno = t3.jobno 
    WHERE t1.rout_no=?", databaseTable_WOROUTH, databaseTable_WOJOBS, databaseTable_SOMAST);

//cmd.Parameters.Add("@rnum", OleDbType.Char).Value = rnum;
//...

// Спасибо за идею и помощь BASOZ

var sql = string.Format(@"
select top 1 
    t1.assemblyno, t1.level, t1.wo_no, t1.rout_no, t1.due_date, t1.printed, t1.rev_no, t2.lot, t2.po, t2.qty_due, 
    t3.comment, t3.jobno, t3.order_val, t3.part_no,t3.po,t3.price, t3.qty_order,t3.quote_no, t3.rev_no 
from {2} t3
    inner join {1} t2 on t3.jobno = t2.jobno
    inner join {0} t1 on t1.wo_no = t2.wo_no 
    where t1.rout_no=?
        and t3.order_val in (
        SELECT max(tt3.order_val) 
                            FROM {0} tt1 
                            left join {1} tt2 
                                on tt1.wo_no = tt2.wo_no
                            left join {2} tt3 
                                on tt2.jobno = tt3.jobno
                            where tt1.rout_no = ?
                            group by tt1.rout_no
        )
        {3} {4}
        order by t3.jobno desc ", "t1", "t2", "t3", startCheck, endCheck);
0 голосов
/ 09 мая 2018

это было бы верно для всех форматов БД, не только для foxpro - вы запросили максимальное значение t3.order_val, но вы не сказали ему, как выбрать максимальное значение для группы, которое делает это .. так что

Если у вас есть дБ имя_файла, пол, возраст

вы можете узнать максимальный возраст для каждого пола с select gender, Max(age) from mytable group by gender.

без группы по ней не знает, что дать вам максимум какого набора значений?

Обычно группа по - это все значения, которые вы не выполняете для такого рода вычислений

...