【发布时间】:2014-01-13 17:44:34
【问题描述】:
所以我有一个表格,可以根据月份确定分公司的地区代码,
让我们从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 说起
所以这是表格的示例外观
我有一个从表中获取数据的代码,但我想要实现的是,如果所选数据的 LoanDate 在上面的日期内(在 fld_Datefrom 和 fld_Dateto 之间),它将使用 fld_BranchRegion 表示为以上。 (例如,日期的贷款日期是 2013-01-12 00:00:00 它将使用 RegionCode 4A 如上所述,如果数据是 2013-02-04 00:00:00 它将使用区域代码 3
这是我使用的代码
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)) )
这样做的问题是它会生成重复值,所以我在 #track 表中出现了 3 次日期,数据的数量也使用不同的区域代码输出了 3 次!!
我不想输出它们,而是从 **#track 中选择区域代码 基于数据的借出日期。**
我只是想实现这一点,而不是输出所有区域代码,它只会使用基于提供的 #track 表的范围之间的区域代码..
有什么帮助吗?还是其他方法??谢谢!。抱歉,我是 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)
【问题讨论】:
-
这些似乎不是重复的。查看 PawnMainID 字段值;它们都是独一无二的。
-
@BillStidham 这些只是示例如果您向上滚动它们,4A 的集合与 3 作为区域代码的集合数据相同。这些只是示例屏幕截图
-
@BillStidham 请再次检查我编辑截图的问题,谢谢。
-
看起来 PawnMainID 在其左侧部分包含分支 ID。 #TrackExpired 和 tbl_PawnMain 之间的 JOIN 是基于一对一的 ID 匹配。但是,您在 tbl_PawnMain 和 #track 之间的 JOIN 是基于来自 #track 的分支 ID 以及从 #TrackExpired 上的 ID 中提取的分支 ID。在不知道这两个临时表是如何构建的情况下,我冒险猜测这个分支 id JOIN 约束是导致重复的原因,因为它可能不是一对一的。
-
@BillStidham 我已经按照您的要求提供了创建两个临时表的代码。谢谢。
标签: sql sql-server tsql date sql-server-2008-r2