Postgresql запрос GROUP BY невозможен - PullRequest
0 голосов
/ 13 марта 2020

В моем проекте у меня есть этот сложный запрос:

SELECT FT."Riferimento1", FT."Riferimento2", "CodProdotto", "QuantitaFatturata", "PrezzoUnit", "DataFattura", "NumeroFattura", "CodCli"
FROM public.idocuments_as_fatturetestata FT
LEFT JOIN public.idocuments_as_fatturerighe FR ON FT."Riferimento1" = FR."Riferimento1" AND FT."Riferimento2" = FR."Riferimento2"
WHERE FT."CodCli" = '12192' GROUP BY "NumeroFattura";

Если я не использую опцию GROUP BY, все будет сделано, но мне придется группировать по столбцу NumeroFattura.

Когда я добавляю предложение Group BY, я получаю эту ошибку:

ОШИБКА: столбец "ft.Riferimento1" должен появляться в предложении GROUP BY или использоваться в статистической функции

если я добавлю систему ft.Riferimento1, спросите меня также ft.Riferimento2 и все столбцы, но я хочу сгруппировать только по столбцу NumeroFattura.

"25"    "000006"    "191215002N"    1   1.800000    "2017-01-31 00:00:00+00"    589
"25"    "000009"    "112036402G"    100 0.970000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008200I"    200 1.660000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008200N"    150 1.660000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008500V1"   53.5    1.930000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008500E"    61  1.930000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008500R"    56  1.930000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "213008200G"    50  1.660000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "113066592N"    20  5.583000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "199900502N"    321 0.725000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "199900602N"    360 0.680000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "217001100F"    1200    2.036000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "112031102N"    1200    0.198000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "112044602N"    800 0.600000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "112036402N"    800 0.500000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "113066702N"    800 0.600000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "113066602N"    800 0.550000    "2017-01-31 00:00:00+00"    318
"25"    "000009"    "112530780N3"   5000    0.178000    "2017-01-31 00:00:00+00"    318

это пример вывода в последнем столбце у меня есть строка NumeroFattura, и я бы сгруппировал по этому значению (в этом примере у меня должно быть две строки для результатов)

Кто-то может сказать мне, почему я не могу группировать, как я?

Огромное спасибо заранее

1 Ответ

1 голос
/ 13 марта 2020

Если вы хотите одну строку на "NumeroFattura", тогда используйте DISTINCT ON:

SELECT DISTINCT ON ("NumeroFattura") FT."Riferimento1", FT."Riferimento2",
       "CodProdotto", "QuantitaFatturata", "PrezzoUnit", "DataFattura",
       "NumeroFattura", "CodCli"
FROM public.idocuments_as_fatturetestata FT LEFT JOIN
     public.idocuments_as_fatturerighe FR
     ON FT."Riferimento1" = FR."Riferimento1" AND 
        FT."Riferimento2" = FR."Riferimento2"
WHERE FT."CodCli" = '12192' 
ORDER BY "NumeroFattura";

. Это возвращает произвольную совпадающую строку. Неясно, какую строку вы хотите, но вы можете добавить дополнительный ключ к ORDER BY, чтобы выбрать, какой из них.

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