2017-05-16 12 views
2

ありがとうGurwinder Singhさん本当にそれを感謝します。私はサンプルデータレコードを編集しており、問題に取り組んでいます。SQL Severのケースステートメントで重複の可能性を確認

CREATE TABLE #TEMP 
    (
    PER_ID INT, 
    PER_SS VARCHAR (11), 
    CHARGE_CD VARCHAR (25), 
    PER_CODE VARCHAR (20), 
    FILE_DT DATETIME, 
    PER_CASE_ID INT, 
    PER_PS VARCHAR (5), 
    CREATE_DT DATETIME 


    ) 

    INSERT INTO #TEMP VALUES('6385789','9801745','21 B 1325(Q)(4)','NMT785989','11/11/2016 12:00 AM','957800','IDA','11/12/2016 11:00 PM') 
    INSERT INTO #TEMP VALUES('6385789','9801745','21 B 1325(Q)(4)','NMT785989','11/11/2016 12:00 AM','698080','QBC','11/12/2016 11:00 PM') 
    INSERT INTO #TEMP VALUES('6388788','9801746','21 B 1325(Q)(4)','NMT785990','11/11/2016 12:00 AM','957801','CAN','11/12/2016 11:00 PM') 
    INSERT INTO #TEMP VALUES('6388788','9801746','21 B 1326(Q)(5)','NMT785990','11/11/2016 12:00 AM','698081','ADA','11/12/2016 11:00 PM') 
    INSERT INTO #TEMP VALUES('6385790','9858888','21 B 1326(Q)(5)','NMT785990','11/11/2016 12:00 AM','698888','ADA','11/12/2016 11:00 PM') 
    INSERT INTO #TEMP VALUES('6385790','9858888','21 B 1326(Q)(5)','NMT785990','11/11/2016 12:00 AM','698888','CAN','11/12/2016 11:00 PM') 



    SELECT 
--the case station with partition script was written by Gurwinder Singh. 
    CASE WHEN MAX(PER_ID) OVER (PARTITION BY PER_ID) = MIN(PER_ID) OVER (PARTITION BY PER_ID) THEN 'YES' ELSE 'NO' END AS SAME_PER_ID, 
    CASE WHEN MAX(PER_SS) OVER (PARTITION BY PER_ID) = MIN(PER_SS) OVER (PARTITION BY PER_ID) THEN 'YES' ELSE 'NO' END AS SAME_PER_SS, 
    CASE WHEN MAX(CHARGE_CD) OVER (PARTITION BY PER_ID) = MIN(CHARGE_CD) OVER (PARTITION BY PER_ID) THEN 'YES' ELSE 'NO' END AS SAME_CHARGE_CD, 
    CASE WHEN MAX(PER_CODE) OVER (PARTITION BY PER_ID) = MIN(PER_CODE) OVER (PARTITION BY PER_ID) THEN 'YES' ELSE 'NO' END AS SAME_PER_CODE, 
    CASE WHEN MAX(FILE_DT) OVER (PARTITION BY PER_ID) = MIN(FILE_DT) OVER (PARTITION BY PER_ID) THEN 'YES' ELSE 'NO' END AS SAME_PER_FILE_DT, 
    PER_ID, 
    PER_SS, 
    CHARGE_CD, 
    PER_CASE_ID, 
    PER_PS, 
    PER_CODE, 
    FILE_DT 
    FROM #TEMP 

PER_CASE_ID =(698888)という2つのレコードを除外する方法はありますか?基本的には、PER_CASE_IDが同じであるため、これらの2つのレコードが返されていることに興味はありません。私は、PER_CASE_IDが異なる結果にのみ興味があります。再度、感謝します。ジョー。

+0

期待どおりの結果を出力できますか? –

答えて

2

異なる値がある場合、私はあなたが表示したい推測しています一連の列の異なる行のper_idの場合ウィンドウ関数MINMAXを使用して、同じper_idに対して異なる列に複数の異なる値があるかどうかを調べることができます。

select 
    t.*, 
    case when max(PER_SS) over (partition by per_id) = min(PER_SS) over (partition by per_id) then 'Yes' else 'No' end as same_per_ss, 
    case when max(PER_MISC) over (partition by per_id) = min(PER_MISC) over (partition by per_id) then 'Yes' else 'No' end as same_per_misc, 
    case when max(PER_CLASS) over (partition by per_id) = min(PER_CLASS) over (partition by per_id) then 'Yes' else 'No' end as same_per_class, 
    case when max(FILE_DT) over (partition by per_id) = min(FILE_DT) over (partition by per_id) then 'Yes' else 'No' end as same_per_file_dt 
from #temp t; 
+0

@ Singh、これはすごくうまくいきます。皆さんありがとう。 Joe – joe

+0

@ Gurwinder Singh、私はサンプルデータを編集し、次の問題について説明しました。ご協力いただきありがとうございます。 Joe – joe

+0

@Joe - 1つの質問で複数の質問をしないでください。新しい質問を開いてください。 – GurV

0

テーブルから内部への結合を試みる可能性があります。 TEMP T1 INNER FROM

SELECT * T1.PER_SS = T2.PER_SS AND T1.PER_ID = T2.PER_ID ON TEMPのT2を登録しよう - など

ます。また、このような何かを試みることができる:ような何か。

SELECT T1 * TEMP T1から、TEMPのT2 T1.PER_SS = T2.PER_SS AND T1.PER_ID = T2.PER_ID - 。など

+0

投稿したクエリに内部結合があります。 2番目のクエリは、内部結合の古い構文です。 –

+0

申し訳ありませんが、インナー・ジョインを見たことがありませんでした。 – Felipe