2013-12-26 5 views
0

Так у меня есть таблица, которая будет определять код региона в виде отделения В зависимости от Месяц,
позволяет сказать, что от January to february it's Region code would be 1,from February to March it would be 2 и for the month of april upto date would be 3Выбор конкретных данных в месяц

так вот образец внешнего вида таблицы enter image description here

У меня есть код, который получает данные из таблицы, но я хочу добиться того, что если LoanD ate из выбранных Данных находится в Датах выше (между fld_Datefrom и fld_Dateto), он будет использовать fld_BranchRegion, который указан, как указано выше. (EG. Loandate на сегодняшний день 2013-01-12 00:00:00 он будет использовать RegionCode 4A, как указано выше, и если данные 2013-02-04 00:00:00 он будет использовать код региона

здесь код я использую

SELECT 
     TE.LOAN 
     ,bp.REGION 
     ,BP.ID 
     ,TE.AMOUNT 
     ,te.ID  
FROM #TrackExpired TE 
    inner join Transactions.TBLMAIN PM 
    on TE.ID = PM.ID 
    inner join #track BP 
    on BP.ID=cast(TE.ID/1000000000000 as decimal(38,0)) 
WHERE ((cast(TE.EXPIRATION as date) < cast(TE.newloandate as date)) 
     OR(TE.NewLoanDate is null and (cast(TE.EXPIRATION as date) < cast(PM.REDEEMED as date))) or ((TE.NewLoanDate is null and PM.REDEEMED is null) and (PM.STATUS = 7 or PM.STATUS = 5)) ) 

проблемы с этим состоит в том, что он генерирует повторяющиеся значения, так у меня есть 3 мест где даты в #track таблицы номер данных также выведенная 3 раза с различным кодом региона !!

Вместо того, чтобы выводить их я хотел бы для того чтобы достигнуть по выбору код региона от ** # трек на основе даты займа данных. **

я просто хочу, чтобы добиться того, что вместо того, чтобы выводить все региональный код, он просто использовал бы код региона, который находится между диапазонами, основанными на таблице #track.

Любая помощь? или другого подхода? Спасибо!. извините im новое для SQL.

EDIT вот код для создания временных таблиц.

#trackexpired

SELECT PH.ID 
     ,PH.LOAN 
     ,PH.EXPIRATION 
     ,PH.AMOUNT 
     ,(SELECT T3.LOAN FROM Transactions.HISTO T3 INNER JOIN 
       (
         SELECT MIN(T2.ID) as pawnhisto 
         FROM Transactions.HISTO T2 
         WHERE T2.ID > PH.ID 
          AND PH.ID = T2.ID 
      ) T4 
         ON T4.pawnhisto = T3.ID 

    )as 'NewLoanDate' 
INTO #TrackExpired 
FROM Transactions.HISTO PH 
    INNER JOIN Transactions.MAIN PM 
    ON PM.ID=PH.ID 
WHERE YEAR(PH.LOAN) = @YEAR 

#track

Select bt.CODE 
     ,bp.ID 
     ,AREA 
     ,REGION 
     ,NCODE 
     ,FROM 
     ,isnull(fld_Dateto,GETDATE()) as fld_Dateto 
into #sort 
from Transactions.tbl_BranchTracking bt 
inner join Reference.tbl_BranchProfiles bp 
on bt.CODE = bp.CODE 

Select * into #track from #sort 
where @YEAR >= year(FROM) 
     and 
     @YEAR <= year(fld_Dateto) 
+0

Это не дубликаты. Посмотрите на значения поля PawnMainID; все они уникальны. –

+0

@BillStidham это просто образец. Если вы прокрутите их, набор из 4A будет таким же, как и установленные данные с 3 в качестве регионального кода. это просто примеры скриншотов – user2705620

+0

@BillStidham, пожалуйста, еще раз проверьте вопрос, который я редактировал скриншоты. – user2705620

ответ

1

Данные испытаний

create table #LoanTable (
    ID int not null, 
    RegionCode nvarchar(50) not null, 
    LoanDate datetime not null 
); 

insert into #LoanTable values 
(1,'5','10/01/2014'), 
(2,'5','10/18/2014'), 
(3,'5','10/02/2014'), 
(4,'3','04/11/2014'), 
(5,'3','04/05/2014'), 
(6,'4A','01/09/2014'), 
(7,'4A','01/05/2014') 

create table #LoanDetailsTable (
    ID int not null, 
    LoanAmount INT not null, 
    LoanDate datetime not null 
); 

    insert into #LoanDetailsTable values 
(1,5000,'10/15/2014'), 
(2,1000,'10/11/2014'), 
(3,2000,'10/09/2014'), 
(4,1500,'04/13/2014'), 
(5,5000,'04/17/2014'), 
(6,500,'01/19/2014'), 
(7,2500,'01/15/2014') 

Запрос

;With RegCode 
AS 
(
    SELECT RegionCode, MAX(MONTH(LoanDate)) [Month] 
    FROM #LoanTable 
    GROUP BY RegionCode 
) 
SELECT LDT.* , RC.RegionCode 
FROM #LoanDetailsTable LDT INNER JOIN RegCode RC 
ON MONTH(LDT.LoanDate) = RC.[Month] 

Результаты

ID LoanAmount LoanDate     RegionCode 
1 5000  2014-10-15 00:00:00.000  5 
2 1000  2014-10-11 00:00:00.000  5 
3 2000  2014-10-09 00:00:00.000  5 
4 1500  2014-04-13 00:00:00.000  3 
5 5000  2014-04-17 00:00:00.000  3 
6 500   2014-01-19 00:00:00.000  4A 
7 2500  2014-01-15 00:00:00.000  4A 

Использование CTE извлечь месяц часть дня вместе с кодом региона, связанные с ним, а затем присоединиться к нему со столом вы данных на месяц с даты кредита и извлечь месяц в cte и получить код региона, какой бы он ни был в то время.счастливые дни :)

+0

Это будет работать, проблема в том, что код региона меняется каждый месяц, поэтому он должен быть на таблице, как я показал выше, а не жестко закодированной – user2705620

+0

@ User6675636b20796f7521 да, это прекрасно, вы можете добавить 12 WHEN-заявлений в свой оператор case и предоставить код региона за все 12 месяцев года. –

+0

или вы пытаетесь сказать, что он меняется на все месяцы каждый месяц ??? –

Смежные вопросы