Sub Select с groupby в SQL Server не работает - PullRequest
0 голосов
/ 15 октября 2018

Это мой выбор

SELECT
    (FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')) + '-' + (FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR')) AS 'year/mouth',
    ROUND(SUM(ITEM.VALORLIQUIDO),2) AS 'value'
FROM 
    FN_DOCUMENTOS DOC,
    CM_OPERACOESFATURAMENTO OFAT,
    CM_ITENS ITEM,
    PD_PRODUTOS PF
WHERE
    (OFAT.HANDLE = DOC.OPERACAOFATURAMENTO)
    AND (ITEM.DOCUMENTO = DOC.HANDLE)
    AND (PF.HANDLE = ITEM.PRODUTO)
    AND (OFAT.CODIGO IN (101,102,103,104,106,120,125,145,147,
     148,150,151,153,163,164,170,171,180,182,184,185,186,
     201,202,203,220,225,245,248,249,250,251,253,263,264,
     280,282,301,302,304,319,320,345,347,351,353,363,364,
     365,371,380,385)) 
    AND (DOC.FILIAL IN (1))
    AND (PF.MARCAPRODUTO IN (1,5))
    AND (DOC.DATAEMISSAO >= DATEADD(MONTH, -11, GETDATE()))
GROUP BY FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'),FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')
ORDER BY  FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'), FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')

И это мой результат по маркам "1" и "5"

 month - year  |    value
    11-2017        7793.85
    12-2017        90862.51
    01-2018        681044.4
    02-2018        862552.22
    03-2018        963484.25
    04-2018        1127765.61
    05-2018        1485678.23
    06-2018        1249055.52
    07-2018        2098446.61
    08-2018        1765752.61
    09-2018        1139268.88
    10-2018        679253.04

Что мне нужно, это один третий столбец со значением от другихбренды, (2, 3, 4).

Я не могу создать суб-выбор, потому что я получаю ошибку при просмотре "сгруппировать по".

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы можете использовать все необходимые данные и разбить их на два столбца, используя условное агрегирование :

SELECT
    FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')) + '-' + (FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR') AS 'year/mouth',
    ROUND(SUM(CASE WHEN PF.MARCAPRODUTO IN (1,5) THEN ITEM.VALORLIQUIDO END),2) AS 'value',
    ROUND(SUM(CASE WHEN PF.MARCAPRODUTO IN (2,3,4) THEN ITEM.VALORLIQUIDO END),2) AS 'other value'
FROM FN_DOCUMENTOS DOC
  INNER JOIN CM_OPERACOESFATURAMENTO OFAT ON DOC.OPERACAOFATURAMENTO = OFAT.HANDLE,
  INNER JOIN CM_ITENS ITEM ON DOC.HANDLE = ITEM.DOCUMENTO,
    INNER JOIN PD_PRODUTOS PF ON ITEM.PRODUTO = PF.HANDLE
WHERE
    (OFAT.CODIGO IN (101,102,103,104,106,120,125,145,147,
     148,150,151,153,163,164,170,171,180,182,184,185,186,
     201,202,203,220,225,245,248,249,250,251,253,263,264,
     280,282,301,302,304,319,320,345,347,351,353,363,364,
     365,371,380,385)) 
    AND (DOC.FILIAL IN (1))
    AND (PF.MARCAPRODUTO IN (1,2,3,4,5))
    AND (DOC.DATAEMISSAO >= DATEADD(MONTH, -11, GETDATE()))
GROUP BY FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'), FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')
ORDER BY FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'), FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')
0 голосов
/ 16 октября 2018

В вашем SELECT - измените группу на

С:

GROUP BY FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'),FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')

На:

GROUP BY  (FORMAT(DOC.DATAEMISSAO, 'MM','PT-BR')) + '-' + (FORMAT(DOC.DATAEMISSAO, 'yyyy','PT-BR'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...