Создание представления с группировкой - PullRequest
0 голосов
/ 20 февраля 2020

Вид, над которым я работаю, такой, как показано ниже. Я пытаюсь сделать группировку (L.U_ZONE1, L.U_ZONE2, L.LINEID)

СОЗДАТЬ ПРОСМОТР [dbo]. [ZTmSp_ZSD201_VIEW] КАК ВЫБРАТЬ * ИЗ (ВЫБРАТЬ (ВЫБРАТЬ ОТЛИЧНЫЙ H.DocEntry) КАК 'ДОЦЕНТР) '
, MAX (H.U_DocDate) AS' DocDate '
, MAX (H.DocEntry) AS' OrderCode '
, MAX (H.U_PROJNAME) +' ('+ MAX (H.U_ProjCode) + ')' AS 'ProjCode'
, MAX (H.U_CARDNAME) + '(' + CONVERT (varchar, MAX (H.U_CARDCODE)) + +) AS 'CardCode'
, MAX (P.SlpName ) AS 'SlpCode'
, MAX (H.U_DUEDATE) AS 'DueDate'
, MAX (D.Name) AS 'ShipTerms'
, MAX (H.U_SHIPADDR) AS 'Прибыло'
, '' AS 'PayTerms'
, 0 AS 'Receivable'
, 0 AS 'PostCheck'
, 0 AS 'RCVLimit'
, 0 AS 'BondLimit'
, 0 AS ' ColAMT '
, 0 AS' BondTotal '
, CONVERT (varchar, 0) +' ㎡ 'AS' UnpaidQTY '
, CONVERT (varchar, 0) +' Kg 'AS' StockQTY '
, 0 AS 'UnshippedAMT'
, CONVERT (varchar, 0) + '㎡' AS 'OrderQTY'
, CONVERT (varchar, 0) + '㎡' AS 'ShipTotal'
, MAX (H. U_COMMENTS) AS 'Remark'
, МАКС. (H.U_REMARK) AS 'ShipMemo'
, СЛУЧАЙ, КОГДА ГРУППА (L.LineId) = 1, ТО 99999 КОГДА ГРУППА (H.DocEntry) = 0 И ГРУППИРОВАНИЕ (L.U_ZONE2) <> 0, ТО 0 ELSE MAX (L.LineId) END AS LineId

     , CASE WHEN GROUPING(L.U_ZONE1) = 1
            THEN '[TOTALSUM]' ELSE CONVERT(varchar,MAX(L.U_ZONE1)) END AS Section1  

     , CASE WHEN GROUPING(L.U_ZONE1) <> 1 AND GROUPING(L.U_ZONE2) <> 0
            THEN '[TOTAL]' 
            WHEN GROUPING(L.U_ZONE1) = 1
            THEN NULL ELSE MAX(ISNULL(L.U_ZONE2,'')) END AS Section2    

     , CASE WHEN GROUPING(L.LineId) = 1
            THEN NULL ELSE MAX(M.FrgnName) END AS Item          

     , CASE WHEN GROUPING(L.LineId) = 1
            THEN NULL ELSE MAX(L.U_ITEMSPEC) END AS UOM 

     , CASE WHEN GROUPING(L.LineId) = 1
            THEN NULL ELSE CASE WHEN MAX(M.QryGroup7)='Y' 
                                    THEN left(max(N.DistNumber),7) + '-' + MAX(N.U_PACKAGENO)
                                    ELSE MAX(L.U_BATCHNO) END END AS PackCode       

     , CASE WHEN GROUPING(L.LineId) = 1
            THEN NULL ELSE MAX(L.U_LENGTH) END AS ItemLength        

     , SUM(L.U_QTY) AS Quantity 

     , SUM(L.U_WEIGHT) AS ItemWeight        

     , SUM(L.U_AREA) AS ItemExtent      

     , SUM(L.U_PRICE) AS Price              

     , SUM(L.U_AMOUNT) AS Amount            
FROM
    [@ZSD201H] H JOIN [@ZSD201L] L ON H.DocEntry = L.DocEntry
    LEFT JOIN OITM M ON L.U_ITEMCODE = M.ItemCode
    LEFT JOIN OBTN N ON L.U_ITEMCODE = N.ItemCode AND L.U_BATCHNO = N.DistNumber
    LEFT JOIN OSLP P ON H.U_SlpCode = P.SlpCode
    LEFT JOIN [@ZMD030] D ON H.U_ZMD030 = D.Code
WHERE
    ISNULL(L.U_ITEMNAME, '') <>''
    AND L.U_BATCHNO IN (SELECT U_BATCHNO FROM [@ZSD201L] WHERE DocEntry = L.DocEntry AND U_CHK = 'Y')
    GROUP BY ROLLUP(L.U_ZONE1, L.U_ZONE2, L.LineId, H.DocEntry)
    )TB

GO

Проблема в представлении выше, я не могу получить агрегированные строки для группировки (L.U_ZONE1 , L.U_ZONE2, L.LINEID)

И результат, который я хочу получить, примерно такой, как показано ниже.

ожидаемый результат

...