Как сгруппировать колонку базы данных? - PullRequest
1 голос
/ 10 мая 2019

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

SELECT
    sp.SlpCode,
    sp.SlpName,
    sp.Telephone,
    COUNT(od.DocNum) count,
    ISNULL((SELECT COUNT(od.U_ArtWork) WHERE od.U_ArtWork = 'NotRec'), 0) Artwork,
    ISNULL((SELECT COUNT(od.U_DetailPending) WHERE od.U_DetailPending = 'No'), 0) DetailPrinting
FROM 
    OSLP sp
LEFT JOIN 
    ORDR od ON SP.SlpCode = od.SlpCode
WHERE
    sp.Telephone IS NOT NULL
GROUP BY
    sp.SlpCode, sp.SlpName, sp.Telephone,
    od.U_ArtWork, od.U_DetailPending
ORDER BY
    sp.SlpName ASC;

Результаты таковы:

enter image description here

Но мне нужны такие результаты, как это:

* +1012 *enter image description here

Ответы [ 2 ]

3 голосов
/ 10 мая 2019

Вы можете попробовать агрегировать только по трем столбцам SlpCode, SlpName и Telephone:

SELECT
    sp.SlpCode,
    sp.SlpName,
    sp.Telephone,
    COUNT(od.DocNum) count,
    COUNT(CASE WHEN od.U_ArtWork = 'NotRec' THEN 1 END) AS Artwork,
    COUNT(CASE WHEN od.U_DetailPending = 'No' THEN 1 END) AS DetailPrinting
FROM OSLP sp
LEFT JOIN ORDR od
    ON SP.SlpCode = od.SlpCode
WHERE
    sp.Telephone IS NOT NULL
GROUP BY
    sp.SlpCode,
    sp.SlpName,
    sp.Telephone,
ORDER BY
    sp.SlpName;
3 голосов
/ 10 мая 2019

Удалить od.U_ArtWork,od.U_DetailPending из group by - эти столбцы используются в агрегации, поэтому нет необходимости добавлять в группу по предложению

SELECT
    sp.SlpCode,
    sp.SlpName,
    sp.Telephone,
    COUNT(od.DocNum) count,
    COUNT(case when od.U_ArtWork = 'NotRec' then od.U_ArtWork end) Artwork,
    COUNT(case when od.U_DetailPending='No' then od.U_DetailPending end) DetailPrinting
FROM OSLP sp
LEFT JOIN ORDR od
    ON SP.SlpCode = od.SlpCode
WHERE
    sp.Telephone IS NOT NULL
GROUP BY
    sp.SlpCode,
    sp.SlpName,
    sp.Telephone
ORDER BY
    sp.SlpName ASC
...