Начало » Использование СУБД » Microsoft SQL Server » Помогите с запросом в MS SQL (Сделать из выборки отчет)
Помогите с запросом в MS SQL [сообщение #2612] |
Wed, 21 June 2023 09:12 |
Андрей
Сообщений: 1 Зарегистрирован: June 2023
|
Junior Member |
|
|
Добрый день, меня зовут Андрей. Помогите пожалуйста доработать запрос.
Запрос делает выборку которая показывает строчную выборку с I’d и кол-вот email. Нужно из него сформировать отчет, не могу разобраться.
Должна быть одна строка, первая показывает кол-во всех строк, вторая кол-во ошибок, 3 долю ошибок от всего кол-ва, почему то через with выборка точная не происходит.
Запрос ниже:
USE SBL_DM_Main
GO
WITH CTE_E AS
(
SELECT bk_Contragent_IID, COUNT (*) AS ERRORS_CONTR
FROM (
SELECT
C.bk_Contragent_IID
FROM [dm_exch_csh].[v_Project_Info] AS PRO
LEFT JOIN [dm_exch_csh].[v_Leasing_Agreement_Info] AS LA ON PRO.Project_Code = LA.Project_Code
LEFT JOIN [dm_exch_csh].[v_MD_Contragent] AS C ON PRO.Contragent_IID = C.bk_Contragent_IID
LEFT JOIN [CSH].[stg_mds].[MD_Communication_Contragent] AS CC ON C.bk_Contragent_IID = CC.MD_Contragent_IID
LEFT JOIN (
SELECT MD_Contragent_IID, COUNT (DR_CommunicationType_IID) AS CNT
FROM [CSH].[stg_mds].[MD_Communication_Contragent]
WHERE DR_CommunicationType_IID = 3
GROUP BY MD_Contragent_IID
) TAB ON C.bk_Contragent_IID = TAB.MD_Contragent_IID
WHERE CC.MD_Contragent_IID IS NULL
OR (
LA.Leasing_Agreement_Code IS NULL
AND PRO.Project_Demand_Date > '2022.03.31'
AND CC.DR_CommunicationType_IID = 3
AND TAB.CNT = 0
)
UNION
SELECT
C.bk_Contragent_IID
FROM [dm_exch_csh].[v_Leasing_Agreement_Info] AS LA
LEFT JOIN [dm_exch_csh].[v_MD_Contragent] AS C ON LA.Contragent_IID = C.bk_Contragent_IID
LEFT JOIN [CSH].[stg_mds].[MD_Communication_Contragent] AS CC ON C.bk_Contragent_IID = CC.MD_Contragent_IID
LEFT JOIN (
SELECT MD_Contragent_IID, COUNT (DR_CommunicationType_IID) AS CNT
FROM [CSH].[stg_mds].[MD_Communication_Contragent]
WHERE DR_CommunicationType_IID = 3
GROUP BY MD_Contragent_IID
) TAB ON C.bk_Contragent_IID = TAB.MD_Contragent_IID
WHERE CC.MD_Contragent_IID IS NULL
OR (
LA.Delivery_Date <> ''
AND (
la.Archive_Transfer_Date > '2022-03-31'
OR la.Archive_Transfer_Date = ''
)
AND TAB.CNT = 0
)
) AS T
GROUP BY bk_Contragent_IID
), -- таблицы внутри конструкции WITH перечесляются через запятую и оборачиваются в скобки
CTE_C AS -- таблица записей всего
(
SELECT bk_Contragent_IID, COUNT (*) AS ALL_CONTR
FROM (
SELECT C.bk_Contragent_IID
FROM [dm_exch_csh].[v_Project_Info] AS PRO
LEFT JOIN [dm_exch_csh].[v_Leasing_Agreement_Info] AS LA ON PRO.Project_Code = LA.Project_Code
LEFT JOIN [dm_exch_csh].[v_MD_Contragent] AS C ON PRO.Contragent_IID = C.bk_Contragent_IID
WHERE LA.Leasing_Agreement_Code IS NULL
AND PRO.Project_Demand_Date > '2022.03.31'
UNION
SELECT C.bk_Contragent_IID
FROM [dm_exch_csh].[v_Leasing_Agreement_Info] AS LA
LEFT JOIN [dm_exch_csh].[v_MD_Contragent] AS C ON LA.Contragent_IID = C.bk_Contragent_IID
WHERE la.Archive_Transfer_Date > '2022-03-31'
OR la.Archive_Transfer_Date = ''
) AS T
GROUP BY bk_Contragent_IID
).
—- пример доработки запроса
SELECT COUNT (CTE_E.bk_Contragent_IID ) AS [Ошибки], COUNT (CTE_C.bk_Contragent_IID ) AS [Все строки]
FROM CTE_E,CTE_C
|
|
|
|
Re: Помогите с запросом в MS SQL [сообщение #2704 является ответом на сообщение #2612] |
Fri, 07 July 2023 15:46 |
flexgen
Сообщений: 16 Зарегистрирован: July 2022
|
Junior Member |
|
|
Я так понимаю что все объекты v_* это views? И с какими условиями они построены - неизвестно? Тогда разобраться будет практически невозможно. Могу посоветовать сначала выяснить какие данные возвращают запросы к каждой View, потом связывать их по одной с главной таблицей и смотреть на результат. Так ты сможешь понять какой именно JOIN портит картину. Другого варианта не вижу.
|
|
|
Переход к форуму:
Текущее время: Sun Dec 22 19:13:09 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00650 секунд
|