Мой стол был достаточно, чтобы получить то, что мне нужно в начале проекта, но теперь мне нужно его расширить.
Таблица s_ogr
id | ad | numara | yurt_id | egitim_id | yetkili_id | yetkili_ad
Текущая таблица s_kontrol
id | ogr_id | tur_id | durum_id | tarih | egitim_id | yurt_id
Что нужно s_kontrol_k
id | ogr_id | ogr_numara |ogr_ad | tur_id | durum_id | tarih | egitim_id | yurt_id
Объяснение строк ad = name
, ogr_id
is student_id
, yurt_id
is department_id
Мое значение; s_kontrol
полна данных более 24000. Мне нужно, чтобы он расширил s_kontrol_k
, но новые два поля должны быть взяты из таблицы s_ogr
, путем операции s_ogr
и s_kontrol
(s_ogr.id = s_kontrol.ogr_id и s_ogr.yurt_id = s_kontrol.yurt_id). Я вижу, что моя ошибка заключается не в том, чтобы добавить ogr_id
как id
студента в s_kontrol
Что мне нужно; Полезный запрос, который копирует данные из источника, но как заполнять новые поля из третьей таблицы с правильными значениями
INSERT INTO s_kontrol_k ( id , ogr_id , tur_id , durum_id , tarih , egitim_id , yurt_id )
SELECT id , ogr_id , tur_id , durum_id , tarih , egitim_id , yurt_id FROM s_kontrol
Запросы, которые возникают у меня, поэтому мне нужна простая таблица
SELECT s_kontrol.ogr_id,
s_ogr.ad,
s_kontrol.tur_id,
s_kontrol.durum_id,
SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end) var,
SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end) gorevli,
SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end) yok,
SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end) izinli,
SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) hatimde
FROM s_kontrol, s_ogr
WHERE s_kontrol.ogr_id=s_ogr.numara
AND s_kontrol.yurt_id=s_ogr.yurt_id
and s_ogr.yurt_id=?
and tarih BETWEEN ? and ?
and tur_id IN (?)
GROUP BY s_kontrol.ogr_id
Второй
select deneme.ogr_id,
deneme.ad,
sum(case deneme.tur_id WHEN 1 THEN YUZDE else 0 END) sabah ,
sum(case deneme.tur_id WHEN 2 THEN YUZDE else 0 END) ogle,
sum(case deneme.tur_id WHEN 4 THEN YUZDE else 0 END) aksam,
sum(case deneme.tur_id WHEN 5 THEN YUZDE else 0 END) yatsi,
sum(case deneme.tur_id WHEN 6 THEN YUZDE else 0 END) sohbet,
sum(case deneme.tur_id WHEN 7 THEN YUZDE else 0 END) muhtelif
FROM (
SELECT s_kontrol.ogr_id,
s_ogr.ad,tur_id,
CEILING(((SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) )
-(SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)))
/(SUM(case s_kontrol.durum_id WHEN 1 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 2 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 3 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 4 THEN 1 else 0 end)
+SUM(case s_kontrol.durum_id WHEN 5 THEN 1 else 0 end) )
* 100) YUZDE
FROM s_kontrol, s_ogr
WHERE s_kontrol.ogr_id=s_ogr.numara
and s_ogr.yurt_id=?
and tarih BETWEEN ? and ?
and tur_id IN(1,2,3,4,5,6,7)
GROUP BY s_kontrol.ogr_id,s_ogr.ad, tur_id
) deneme
group by ogr_id,ad order by 1
Вы можете попробовать что-то вроде ниже.
INSERT INTO s_kontrol_k
( id , ogr_id , ogr_ad , tur_id , durum_id , tarih , egitim_id , yurt_id )
SELECT o.id , o.ogr_id , o.ogr_ad ,
s.tur_id , s.durum_id , s.tarih , s.egitim_id , s.yurt_id
FROM
s_kontrol s inner join s_ogr o on o.yurt_id =s.yurt_id;
INSERT INTO s_kontrol_k (
id, ogr_id, ogr_numara, ogr_ad, tur_id,
durum_id, tarih, egitim_id, yurt_id)
SELECT
s_kontrol.id,
s_ogr.id,
s_kontrol.ogr_id,
s_ogr.ad,
s_kontrol.tur_id,
s_kontrol.durum_id,
s_kontrol.tarih,
s_kontrol.egitim_id,
s_kontrol.yurt_id FROM
s_kontrol inner join
s_ogr WHERE
s_ogr.yurt_id = s_kontrol.yurt_id
and s_ogr.numara = s_kontrol.ogr_id
Сначала скопировали те же столбцы
INSERT INTO s_kontrol_k (
id, ogr_numara, tur_id, durum_id, tarih,
egitim_id, yurt_id)
SELECT
id,
ogr_id,
tur_id,
durum_id,
tarih,
egitim_id,
yurt_id
FROM
s_kontrol
Затем обновленные значения
UPDATE
s_kontrol_k
INNER JOIN s_ogr ON s_kontrol_k.ogr_numara = s_ogr.numara
and s_kontrol_k.yurt_id = s_ogr.yurt_id SET s_kontrol_k.ogr_id = s_ogr.id
UPDATE
s_kontrol_k
INNER JOIN s_ogr ON s_kontrol_k.ogr_numara = s_ogr.numara
and s_kontrol_k.yurt_id = s_ogr.yurt_id SET
s_kontrol_k.ogr_ad = s_ogr.ad
Может быть обновлено на главной таблице, добавив новые строки