Как удалить сводную точку SQL из представления SQL в Transact-SQL (T-SQL) - PullRequest
0 голосов
/ 06 июня 2019

У меня есть представление LoanDocDtl, которое сделано из сводной таблицы и вызывает проблемы с производительностью.Всякий раз, когда я запрашиваю это представление, мне требуется много времени, чтобы получить результат.

Я пытался преобразовать его в таблицу, но он все еще медленный.

create view dbo.LoanDocDtl
as
    select
        LoanId,
        DocUnknownCreateDtTm = [0],
        DocUnknownExistBit = convert(bit, case when [0] is not null then 1 else 0 end), 
        DocCertificateCreateDtTm = [1],
        DocCertificateExistBit = convert(bit, case when [1] is not null then 1 else 0 end), 
        DocDownloadCreateDtTm = [2],
        DocDownloadExistBit = convert(bit, case when [2] is not null then 1 else 0 end), 
        DocVerificationCreateDtTm = [225],
        DocVerificationExistBit = convert(bit, case when [225] is not null then 1 else 0 end)
    from (
        select
            LoanId,
            DocTypeId,
            CreateDtTm
        from LoanDoc --table
        where DocTypeId <> 0) a
    pivot (max(a.CreateDtTm)
        for DocTypeId
            in ([0], 
                [1], 
                [2], 
                [225])) as pvt;
go

Есть 0 -255 различных DocTypeId, я добавил только несколько в приведенном выше коде, чтобы минимизировать представление.Таблица LoanDoc имеет тонны LoanId, и к каждому LoanId прикреплено несколько DocTypeId, поэтому она очень медленная.

Есть ли способ оптимизировать это, сделав эту таблицу илизаполнить это представление с помощью временных таблиц или добавить все в хранимую процедуру и заполнить это представление?

...