Goran Bibic Ответов: 2

Выберите из нескольких таблиц MS SQL


В чем я ошибся ?

Ошибка есть
Msg 8120, Level 16, State 1, Line 30
Column 'mp_ulazni_racun_roba_lista.poslovni_partner' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


Что я уже пробовал:

select x1.poslovni_partner as 'Poslovni partner',   
CONVERT(decimal(16,2),x1.Nabavka) AS 'Prijem',  
CONVERT(decimal(16,2),Izdavanje,0) AS 'Izdavanje'   
    from(select poslovni_partner, iznos_sa_porezom as Nabavka   
    from (select poslovni_partner, SUM(ISNULL(iznos_sa_porezom,0)) as iznos_sa_porezom 
    from mp_ulazni_racun_roba_lista union all select poslovni_partner, 
        SUM(ISNULL(iznos_sa_porezom,0)) as iznos_sa_porezom from mp_ulazni_racun_ostalo_lista) a   
    group by poslovni_partner, iznos_sa_porezom) x1   
    left join(select poslovni_partner, iznos_sa_pdv as Izdavanje   
    from(select kupac as poslovni_partner, SUM(ISNULL(iznos_sa_pdv,0)) as iznos_sa_pdv 
    from mp_racun_lista union all select kupac as poslovni_partner, 
        SUM(ISNULL(iznos_sa_pdv,0)) as iznos_sa_pdv from mp_faktura_lista union all 
    select kupac as poslovni_partner, SUM(ISNULL(iznos_sa_pdv,0)) as iznos_sa_pdv from vp_faktura_lista) b   
    group by poslovni_partner,iznos_sa_pdv) x2  
    on x1.poslovni_partner = x2.poslovni_partner

Goran Bibic

Теперь Обновлено Ричардом Маккатчаном

Ошибка-Msg 8120, Уровень 16, состояние 1, строка 44
Столбец "mp_ulazni_racun_roba_lista.poslovni_partner" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

2 Ответов

Рейтинг:
0

RickZeeland

Смотрите отличное, но несколько длинное объяснение OriginalGriff здесь: SQL GROUP By и ошибка "имя столбца недопустимо в списке выбора, потому что..." [^]


OriginalGriff

"Длинный"?
"Длинный"?

Это была короткая версия! :смеяться:

RickZeeland

Извините меня за мой голландский способ написания :)

Рейтинг:
0

MadMyche

Мои рекомендации состояли бы в том, чтобы попробовать это в слоях, поскольку у вас есть несколько подзапросов в коде, а затем работать вверх по линии. Возможно, вы даже захотите инкапсулировать различные подзапросы в виде представлений, а затем объединить их в родительский запрос.

В этом фрагменте мы имеем родительский запрос, ссылающийся на подзапрос(1), который, в свою очередь, вызывает подзапрос(2).
Однако оказывается, что агрегатные функции находятся в подзапросе(2); предложение GROUP BY находится вне этого цикла в подзапросе(1)

from(
	select	poslovni_partner, iznos_sa_porezom as Nabavka
	from (
		select	poslovni_partner, SUM(ISNULL(iznos_sa_porezom,0)) as iznos_sa_porezom 
		from	mp_ulazni_racun_roba_lista
			union all
		select	poslovni_partner, SUM(ISNULL(iznos_sa_porezom,0)) as iznos_sa_porezom
		from	mp_ulazni_racun_ostalo_lista
	) a
	group by poslovni_partner, iznos_sa_porezom
) x1 


Goran Bibic

Я пробую это и работаю, но только 1 строка x1.poslovni_partner

Пословни партнер Улаз [БП] Улаз [П] Улаз [СП] Излаз [БП] Излаз[П] Излаз [СП]
Сервис я прождаже стилусом С. П. 142.50 24.23 166.73 2926.64 497.53 3424.17

Нужно быть многорядным

выберите Х1.poslovni_partner как сайт Poslovni партнер',
Преобразование(десятичное число(16,2),(x1.Nabavka-(x1.Nabavka*14.5299/100))) Как Ulaz [ВР]',
Преобразование(десятичное число(16,2),x1.набавка*14.5299/100) Как Ulaz [П]',
Преобразовать(десятичное число(16,2),набавка) в 'Ulaz [SP]',
Преобразования(в десятичной системе(16,2),Izdavanje-(Izdavanje*14.5299/100)) Как Izlaz [ВР]',
Преобразования(в десятичной системе(16,2),Izdavanje*14.5299/100) Как Izlaz[П]',
Преобразования(в десятичной системе(16,2),Izdavanje) как Izlaz [СП]'
из(выбрать poslovni_partner, сумма(iznos_sa_porezom) как Nabavka
из(выбрать poslovni_partner, iznos_sa_porezom от Союза mp_ulazni_racun_roba_lista все
выберите poslovni_partner, iznos_sa_porezom из mp_ulazni_racun_ostalo_lista union all
выберите poslovni_partner, iznos_sa_porezom из mp_ulazni_racun_repromaterijal_lista) a
группа по poslovni_partner) x1
LEFT join(select kupac, SUM(iznos_sa_pdv) as Izdavanje
из(выбрать сайт kupac, iznos_sa_pdv от Союза mp_racun_lista все
выберите kupac, iznos_sa_pdv из mp_faktura_lista union all
выберите kupac как poslovni_partner, iznos_sa_pdv как iznos_sa_pdv из vp_faktura_lista) b
группа по kupac) x2
на x1.poslovni_partner = x2.kupac

Goran Bibic

Потребность для всех партнеров x1.poslovni_partner
Этот код результат всего 1 или нужно иснуть чтобы обновить другие

MadMyche

Я знаю, что вам нужно все это; что вам нужно сделать, так это отладить каждый из подзапросов отдельно, а затем присоединиться по одному и перепроверить.