/****** Object: StoredProcedure [dbo].[Akkum_Year] Script Date: 25.11.2019 9:55:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- ================================== ----- =======================================================
ALTER PROCEDURE [dbo].[Akkum_Year]
@KindProvisionCorpCode int
AS
Begin
Declare
@RowNum int,
@LicProvisionID int,
@Value_Year decimal(15,4),
@ObjCorpCode int,
@Year int,
@Year_dt datetime,
@Format int
set Language russian -- для правильного формата даты
-- Выбрать из LicProvisionValue все даты, соотв. фактической добыче нефти
-- по месяцам
Declare Cur_F cursor for
SELECT
lv.LicProvisionID,
SUM(lv.Value) AS Value_Year,
YEAR(lv.DateStart) AS Year,
lv.ObjCorpCode
FROM dbo.LicProvision lp INNER JOIN
dbo.LicProvisionValue lv ON lp.LicProvisionID = lv.LicProvisionID
GROUP BY lp.KindProvisionCorpCode,
(lv.DateStart),
lp.EntityID,
lv.ObjCorpCode,
lv.LicProvisionID,
lv.SourceProvisionCorpCode,
lv.DateStartFmt
HAVING (lp.KindProvisionCorpCode = @KindProvisionCorpCode)
AND (lv.SourceProvisionCorpCode = 2309453)
AND (lv.DateStartFmt = 2187799)
OPEN Cur_F
FETCH NEXT FROM Cur_F
INTO
@LicProvisionID,
@Value_Year,
@Year,
@ObjCorpCode
SET @RowNum = 0
WHILE @@FETCH_STATUS = 0
BEGIN
set @RowNum = @RowNum + 1
print cast(@RowNum as char(8)) + ' ' + cast( @Year as char(4))
+ ' '+ cast(@Value_Year as char(15))
set @Year_dt =Convert(datetime, '31.12.' + cast( @Year as char(4)))
IF NOT EXISTS(SELECT LicProvisionValueID From LicProvisionValue
Where LicProvisionID = @LicProvisionID
AND YEAR(DateStart) = @Year
AND DateStartFmt = 2187801
AND SourceProvisionCorpCode = 2309453)
BEGIN
INSERT INTO LicProvisionValue
(LicProvisionID,
ObjCorpCode,
SourceProvisionCorpCode,
DateStartFmt,
DateStart,
DateEndFmt,
DateEnd,
Value,
DynamicFlag,
AutoFlag
)
VALUES
(
@LicProvisionID,
@ObjCorpCode,
2309453, --факт
2187801, --год
@Year_dt,
2187801, --год
@Year_dt,
@Value_Year,
1,
1
)
END
FETCH NEXT FROM Cur_F
INTO
@LicProvisionID,
@Value_Year,
@Year,
@ObjCorpCode
END
CLOSE Cur_F
DEALLOCATE Cur_F
end -- конец процедуры
--
По всем правилам нормализации фио это первичный ключ (в первом приближении), телефон это атрибут этой записи.
А таблица callhistory содержит только
callid, userid, starttime, endtime, operatorid, --- что то еще
А еще есть CallHistoryView в котором джойнами и создается сводная таблица для морды.