首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一表的不同列中查找匹配的记录

在同一表的不同列中查找匹配的记录
EN

Stack Overflow用户
提问于 2016-01-28 03:07:27
回答 2查看 50关注 0票数 0

我有这样的疑问:

代码语言:javascript
复制
SELECT
    TLOCMTR.LOCATN_K, TLOCMTR.MTR_SRP_N, TLOCMTR.MTR_INST_D, 
    TLOCMTR.MTR_XCHG_OUT_D, RATE.RATE, TMTR.MTR_MFR_MOD_C, 
    TMTR.MTR_MFR_NM_CD
FROM
    TMTR 
RIGHT OUTER JOIN
    TLOCMTR ON TMTR.MTR_SRP_N = TLOCMTR.MTR_SRP_N 
LEFT OUTER JOIN
    RATE ON TLOCMTR.LOCATN_K = RATE.LOCATN_K
WHERE
    ((RATE.RATE >= 20) AND (RATE.RATE <= 29)) 
    AND TLOCMTR.MTR_INST_D >= '2014-01-01' 
ORDER BY
    LOCATN_K, MTR_INST_D

代码的结果是:

我需要做的是计算每个Locatn_K的MTR_MFR_NM_CD从AMP更改为<>AMP的次数,其中MTR_INST_D = MTR_XCHG_OUT_D。例如,LOCATN_K = 85420005从AMP更改为EEM,MTR_XCHG_D = MTR_INST_D 1次(日期为'2014-08-27‘。LOCATN_K 85430001在2015-01-05和2016-01-12两次从AMP转换为EEM。

请用一些T-SQL来帮助我回答这个问题!

EN

回答 2

Stack Overflow用户

发布于 2016-01-28 03:43:35

这就是要点

代码语言:javascript
复制
select * 
  from ( select LOCATN_K, MTR_INST_D, MTR_MFR_NM_CD 
              , LEAD(MTR_MFR_NM_CD, 1,0) OVER (PARTITTION LOCATN_K BY ORDER BY MTR_INST_D) AS MTR_MFR_NM_CD_NEXT
           from 
           ...
        ) tt
 where MTR_MFR_NM_CD      =  'AMP'
   and MTR_MFR_NM_CD_NEXT <> 'AMP'
票数 0
EN

Stack Overflow用户

发布于 2016-01-29 03:22:01

我尝试了飞盘的代码,做了以下修改,但没有得到确切的结果:

代码语言:javascript
复制
select * 
from ( select TLOCMTR.LOCATN_K, TLOCMTR.MTR_SRP_N, TLOCMTR.MTR_INST_D, TLOCMTR.MTR_XCHG_OUT_D, TMTR.MTR_MFR_MOD_C, TMTR.MTR_MFR_NM_CD,
LEAD(TMTR.MTR_MFR_NM_CD, 1,0) OVER (PARTITION BY TLOCMTR.LOCATN_K  
ORDER BY MTR_INST_D) AS MTR_MFR_NM_CD_NEXT
FROM TMTR RIGHT OUTER JOIN TLOCMTR ON TMTR.MTR_SRP_N = TLOCMTR.MTR_SRP_N 
LEFT OUTER JOIN RATE ON TLOCMTR.LOCATN_K = RATE.LOCATN_K
WHERE ((RATE.RATE >= 20) AND (RATE.RATE <= 29)) AND TLOCMTR.MTR_INST_D>='2014-01-01' AND TMTR.MTR_MFR_NM_CD = 'AMP'      
) tt
where tt.MTR_MFR_NM_CD = 'AMP'
and tt.MTR_MFR_NM_CD_NEXT <> 'AMP'
order by tt.LOCATN_K

这导致了'Amp‘到'Amp’和<>'Amp‘到'Amp',但我只想得到’Amp‘到<>'Amp’。

对我来说,最简单的方法是:

代码语言:javascript
复制
WITH A AS 
(SELECT  TLOCMTR.LOCATN_K, TLOCMTR.MTR_SRP_N, TLOCMTR.MTR_XCHG_OUT_D, TMTR.MTR_MFR_MOD_C, TMTR.MTR_MFR_NM_CD
FROM  TMTR RIGHT OUTER JOIN TLOCMTR ON TMTR.MTR_SRP_N = TLOCMTR.MTR_SRP_N LEFT OUTER JOIN  RATE ON TLOCMTR.LOCATN_K = RATE.LOCATN_K
WHERE ((RATE.RATE >= 20) AND (RATE.RATE <= 29)) and TLOCMTR.MTR_INST_D>='2014-01-01' AND TMTR.MTR_MFR_NM_CD = 'AMP'
),
B AS(
SELECT TLOCMTR.LOCATN_K, TLOCMTR.MTR_SRP_N, TLOCMTR.MTR_INST_D, TMTR.MTR_MFR_MOD_C, TMTR.MTR_MFR_NM_CD
FROM TMTR RIGHT OUTER JOIN TLOCMTR ON TMTR.MTR_SRP_N = TLOCMTR.MTR_SRP_N 
LEFT OUTER JOIN RATE ON TLOCMTR.LOCATN_K = RATE.LOCATN_K
WHERE ((RATE.RATE >= 20) AND (RATE.RATE <= 29)) AND TLOCMTR.MTR_INST_D>='2014-01-01' AND TMTR.MTR_MFR_NM_CD <> 'AMP' 
)

SELECT A.LOCATN_K, A.MTR_SRP_N AmpyMeter, B.MTR_SRP_N CreditMeter, B.MTR_INST_D EXCG_DT,  A.MTR_MFR_MOD_C AMP_MODEL, B.MTR_MFR_MOD_C Credit_MODEL
FROM A inner join B on A.MTR_XCHG_OUT_D = B.MTR_INST_D and A.LOCATN_K=B.LOCATN_K
ORDER BY LOCATN_K

我的最终结果如下所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35045916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档