SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » 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 [сообщение #2616 является ответом на сообщение #2612] Wed, 21 June 2023 12:18 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 889
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
имхо, тут программист нужен. ©
Re: Помогите с запросом в MS SQL [сообщение #2704 является ответом на сообщение #2612] Fri, 07 July 2023 15:46 Переход к предыдущему сообщению
flexgen в настоящее время не в онлайне  flexgen
Сообщений: 16
Зарегистрирован: July 2022
Junior Member
Я так понимаю что все объекты v_* это views? И с какими условиями они построены - неизвестно? Тогда разобраться будет практически невозможно. Могу посоветовать сначала выяснить какие данные возвращают запросы к каждой View, потом связывать их по одной с главной таблицей и смотреть на результат. Так ты сможешь понять какой именно JOIN портит картину. Другого варианта не вижу.
Предыдущая тема: Как "зацепить" базу?
Следующая тема: SQL Server Diagnostic Information
Переход к форуму:
  


Текущее время: Sun Dec 22 13:56:29 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00697 секунд