2016-05-26 28 views
0

2つの間に違いがあるかどうかを知ることに関しては本当に問題に固執していますcolumnsRow valueは、次のとおりです。組み合わされた組み合わせが固まった

Serial  code 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A1 
D03L30225 A2 

ので、最後にA2のような別のエントリがあった場合、組み合わせシリアル/コード差を知る方法があると言います。

私は成功せずpartitionrankのようなWindowsの機能を試してみました。これはあなたのために働く必要があります

+3

(1)あなたの質問を編集し、(質問が明確ではない)あなたが望む結果を提供します。 (2)SQLテーブルが*順序付けされていない*セットを表していることを認識していますか?列に順序が指定されていない限り、行に順序はありません。 –

+0

重複したエントリを検索しますか? – bmsqldev

+0

こんにちは、私は3番目の列を追加し、前のものから変更があった場所を探したいと思います。 3番目の列は、実際には、シリアル列とコード列の組み合わせの変更のインジケータになります。 – abs786123

答えて

1

はありがとうございます。注意すべきことは、何かを注文する必要があることです。おそらく、私が注文したものはあなたの状況に合っていないのですが、そこに何かが必要です。

IF OBJECT_ID('tempdb..#Test', 'U') IS NOT NULL DROP TABLE #Test; 

create table #Test 
(
    Serial varchar(10), 
    code char(2) 
) 

insert into #Test values ('D03L30225', 'A1') 
insert into #Test values ('D03L30225', 'A1') 
insert into #Test values ('D03L30225', 'A1') 
insert into #Test values ('D03L30225', 'A2') 

; 
with cte as 
(
    select rownum = row_number() over (order by Serial, code), Serial, code 
    from #Test 
) 

select curr.Serial, curr.code, 
case 
    when curr.code <> prev.code then 
     1 
    else 
     0 
end as 'DifferenceFlag' 
from cte curr 
left join cte prev on prev.rownum = curr.rownum - 1 

SQL Server 2012以降を使用している場合は、LAG機能を使用できます。私たちはまだSQL Server 2008 R2です。だから最近同様のことをする必要がありました。私が上記の方法を見つけたのはhereです。

0

あなたのコメントによると、私はあなたがあなたのテーブルに別の列third_columnを追加することを想定して、この列の設定値ペアSerial,Code

の変化に応じて、それが本当ならば、あなたはこの使用できます

ALTER TABLE 
    table_name 
ADD 
    third_column numeric(18,0); 

UPDATE t 
SET t.third_column = t1.rwn 
FROM table_name AS t 
INNER JOIN 
    (select 
     serial, code 
     ,row_number() over (order by serial, code) - 1 as rwn 
    from 
     table_name 
    group by 
     serial, code 
    order by 
     serial, code 
    ) AS t1 
ON 
    t.serial = t1.serial and t.code = t1.code; 
0

コードが多少異なる場合がございます。以下の最初のクエリは、複数のシリアル番号を持つコードをリストします。そして、2番目のコードは、そのコード内に複数のシリアル番号が含まれているコード全体のグループにフラグを付けます。

提供されている他のソリューションでは、適切な行番号が与えられます。いずれにしても、これが助けになるかどうかわからないが、幸運を祈る!

select 
code, 
count(distinct serial) cnt_serial 
from table 
group by code 
having 
count(distinct serial) > 1 

OR

select 
code, 
serial, 
case when count(distinct serial) over (partition by code) > 1 then 'Y' end fl_code_has_dup 
from table